#include #include #include #include #include using namespace std; #define NDIGIT_MAX 20 string cache[NDIGIT_MAX+1]; string computeCache( int ndigit ) { // 10^p % 7 = modTable[p] となる. const static int modTable[6] = {1, 3, 2, 6, 4, 5}; const int most = ndigit - 1; for ( int p1 = 0; p1 <= most; p1++ ) for ( int p2 = 0; p2 <= most; p2++ ) { if ( p2 == p1 ) continue; for ( int p3 = 0; p3 <= most; p3++ ) { if ( p3 == p2 || p3 == p1 ) continue; for ( int p4 = 0; p4 <= most; p4++ ) { if ( p4 == p3 || p4 == p2 || p4 == p1 ) continue; if ( p1 != most && p2 != most && p3 != most && p4 != most ) continue; const int mod = (1*modTable[p1%6] + 2*modTable[p2%6] + 3*modTable[p3%6] + 4*modTable[p4%6]) % 7; if ( mod != 0 ) continue; string result(ndigit, '0'); result[p1] = '1'; result[p2] = '2'; result[p3] = '3'; result[p4] = '4'; reverse(result.begin(), result.end()); return result; } } } return "0"; } void computeWithZeroOnly( int ndigit ) { cout << cache[ndigit] << endl; } void compute( int D[] ) { // modTable[m] % 7 = m となる. 1234 からなる数字. const static int modTable[7] = {4312, 3214, 4321, 2341, 2314, 3421, 4213}; int mod = 0; for ( int d = 9; d >= 0; d-- ) while ( D[d] > 0 ) cout << d, mod = (mod*10 + d) % 7, D[d]--; mod = mod*10000 % 7; if ( mod == 0 ) cout << modTable[0] << endl; else cout << modTable[7-mod] << endl; } int main() { for ( int ndigit = 5; ndigit <= NDIGIT_MAX; ndigit++ ) cache[ndigit] = computeCache(ndigit); int ntest; cin >> ntest; for ( int nt = 0; nt < ntest; nt++ ) { string num; cin >> num; int D[10]; for ( int d = 0; d <= 9; d++ ) D[d] = 0; for ( int i = 0; i < num.size(); i++ ) D[num[i]-'0']++; assert( D[1] >= 1 && D[2] >= 1 && D[3] >= 1 && D[4] >= 1 ); D[1]--, D[2]--, D[3]--, D[4]--; // 1234 と 0 しかない場合は少し例外となる. if ( D[0] + 4 == num.size() && num.size() > 4 ) computeWithZeroOnly(num.size()); else compute(D); } return 0; }