#include #include #include #define foreach(T,p,c) for(T p = (c).begin(); p != (c).end(); p++) #define DIE_TOP(idx) (die[idx][0]) #define DIE_FRO(idx) (die[idx][1]) #define DIE_RGT(idx) (die[idx][2]) #define DIE_BCK(idx) (die[idx][3]) #define DIE_LFT(idx) (die[idx][4]) #define DIE_BOT(idx) (die[idx][5]) const int die[24][6] = { { 1, 2, 3, 5, 4, 6 }, { 1, 3, 5, 4, 2, 6 }, { 1, 5, 4, 2, 3, 6 }, { 1, 4, 2, 3, 5, 6 }, { 2, 6, 3, 1, 4, 5 }, { 2, 3, 1, 4, 6, 5 }, { 2, 1, 4, 6, 3, 5 }, { 2, 4, 6, 3, 1, 5 }, { 3, 2, 6, 5, 1, 4 }, { 3, 6, 5, 1, 2, 4 }, { 3, 5, 1, 2, 6, 4 }, { 3, 1, 2, 6, 5, 4 }, { 4, 2, 1, 5, 6, 3 }, { 4, 1, 5, 6, 2, 3 }, { 4, 5, 6, 2, 1, 3 }, { 4, 6, 2, 1, 5, 3 }, { 5, 1, 3, 6, 4, 2 }, { 5, 3, 6, 4, 1, 2 }, { 5, 6, 4, 1, 3, 2 }, { 5, 4, 1, 6, 3, 2 }, { 6, 2, 4, 5, 3, 1 }, { 6, 4, 5, 3, 2, 1 }, { 6, 5, 3, 2, 4, 1 }, { 6, 3, 2, 4, 5, 1 } }; using namespace std; void solve(int t[3][3], int f[3][3], int r[3][3], int x, int y, int z, set &A) { if(x == 3) { x = 0; ++y; if(y == 3) { y = 0; ++z; if(z == 3) { int sum = 0; for(int j = 0; j < 3; j++) { for(int i = 0; i < 3; i++) { sum += r[i][j]; } } A.insert(sum); return; } } } int txy = t[x][y]; int fxz = f[x][z]; int ryz = r[y][z]; for(int i = 0; i < 24; i++) { if(txy != 0 && txy != DIE_TOP(i)) continue; if(fxz != 0 && fxz != DIE_FRO(i)) continue; if(ryz != 0 && ryz != DIE_RGT(i)) continue; t[x][y] = DIE_TOP(i); f[x][z] = DIE_FRO(i); r[y][z] = DIE_RGT(i); solve(t, f, r, x + 1, y, z, A); t[x][y] = txy; f[x][z] = fxz; r[y][z] = ryz; } } int main(void) { ifstream cin("F.txt"); int n; cin >> n; for(int k = 0; k < n; k++) { int t[3][3], f[3][3], r[3][3]; for(int j = 0; j < 3; j++) { for(int i = 0; i < 3; i++) { cin >> t[i][2-j]; } } for(int j = 0; j < 3; j++) { for(int i = 0; i < 3; i++) { cin >> f[i][j]; } } for(int j = 0; j < 3; j++) { for(int i = 0; i < 3; i++) { r[i][j] = 0; } } set A; solve(t, f, r, 0, 0, 0, A); if(A.empty()) { cout << 0 << endl; } else { foreach(set::iterator, p, A) { if(p != A.begin()) cout << " "; cout << *p; } cout << endl; } } return 0; }