Pocket Cube
Problem Description
Pocket Cube is the 2×2×2 equivalent of a Rubik’s Cube(3×3×3). The cube consists of 8 pieces, all corners. (from wiki)



The right position rotates in red face clockwisely.
You can get more details from input case.
w represents white , y represents yellow , o represents orange , r represents red , g represents green , b represents blue. In the right position, white and yellow , orange and red , green and blue are in the opposite face.



The right position rotates in red face clockwisely.
You can get more details from input case.
w represents white , y represents yellow , o represents orange , r represents red , g represents green , b represents blue. In the right position, white and yellow , orange and red , green and blue are in the opposite face.
Input
The first line of input contains only one integer T(<=10000), the number of test cases.
Each case contains a Pocket Cube described above. After each case , there is a blacnk line. It guarantees that the corners of the Cube is right.
Each case contains a Pocket Cube described above. After each case , there is a blacnk line. It guarantees that the corners of the Cube is right.
Output
Each case contains only one line. Each line should start with “Case #i: ”,with i implying the case number, followed by “YES” or “NO”,”YES” means you can return it to the right position, otherwise “NO”.
Sample Input
2 g y g y o o w g r r o o w g r r b w b w y b y b r w g b b y o w o r y g y o g b r w o y b r w g
Sample Output
Case #1: YES Case #2: NO
/* * 二阶魔方任何一个块都可以旋转,这里考虑对色面,(黄,白), (绿, 蓝), (红, 橙) * 将标准魔方展开 * 0 0 * 0 0 * 1 -1 1 -1 1 -1 * -1 1 -1 1 -1 1 * 0 0 * 0 0 * 1 -1 * -1 1 * 只要考虑一组对立面即可,比如(黄, 白),对应到上述展开后,只要最后总和模三等于零就是合理的 */
#include <bits/stdc++.h>
#define endl "\n"
using namespace std;
const int cube[] = {0, 0, 0, 0, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 0, 0, 0, 0, 1, -1, -1, 1};
int main() {
int T;
cin >> T;
for(int cas = 1; cas <= T; ++cas) {
char color[2];
int ret = 0;
for(int i = 0; i < 24; ++i) {
scanf("%s", color);
if(color[0] == 'w' || color[0] == 'y') ret += cube[i];
}
cout << "Case #" << cas << ": " << (ret % 3 ? "NO" : "YES") << endl;
}
return 0;
}