#include <stdio.h>
#define UP 0
#define LEFT 1
#define FRONT 2
#define RIGHT 3
#define BACK 4
#define DOWN 5
char rubiks[6][4];
char rotateIndex[6][3][4][2] = {
{{{0, 0}, {0, 2}, {0, 3}, {0, 1}}, {{1, 0}, {2, 0}, {3, 0}, {4, 0}}, {{1, 1}, {2, 1}, {3, 1}, {4, 1}}},
{{{1, 0}, {1, 2}, {1, 3}, {1, 1}}, {{4, 1}, {5, 2}, {2, 2}, {0, 2}}, {{4, 3}, {5, 0}, {2, 0}, {0, 0}}},
{{{2, 0}, {2, 2}, {2, 3}, {2, 1}}, {{1, 1}, {5, 0}, {3, 2}, {0, 3}}, {{1, 3}, {5, 1}, {3, 0}, {0, 2}}},
{{{3, 0}, {3, 2}, {3, 3}, {3, 1}}, {{2, 1}, {5, 1}, {4, 2}, {0, 1}}, {{2, 3}, {5, 3}, {4, 0}, {0, 3}}},
{{{4, 0}, {4, 2}, {4, 3}, {4, 1}}, {{3, 1}, {5, 3}, {1, 2}, {0, 0}}, {{3, 3}, {5, 2}, {1, 0}, {0, 1}}},
{{{5, 0}, {5, 2}, {5, 3}, {5, 1}}, {{1, 3}, {4, 3}, {3, 3}, {2, 3}}, {{1, 2}, {4, 2}, {3, 2}, {2, 2}}}
};
char colors[6] = {'W', 'O', 'B', 'G', 'Y', 'R'};
int n;
void readRubiksState() {
char state[30];
scanf("%d %s", &n
, state
); for (int i=0; i<6; i++) {
for (int j=0; j<4; j++) {
rubiks[i][j] = state[i * 4 + j];
}
}
}
// Pass UP/LEFT/FRONT/RIGHT/BACK/DOWN as parameters to perform the move
void move(int face) {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
int ax = rotateIndex[face][i][j][0];
int ay = rotateIndex[face][i][j][1];
int bx = rotateIndex[face][i][j+1][0];
int by = rotateIndex[face][i][j+1][1];
char tmp = rubiks[ax][ay];
rubiks[ax][ay] = rubiks[bx][by];
rubiks[bx][by] = tmp;
}
}
}
// Print the Rubik's Cube state for debugging purposes
void printRubiks() {
printf(" %c%c\n %c%c\n", rubiks
[0][0], rubiks
[0][1], rubiks
[0][2], rubiks
[0][3]); for (int i
=1; i
<5; i
++) printf("%c%c", rubiks
[i
][0], rubiks
[i
][1]); for (int i
=1; i
<5; i
++) printf("%c%c", rubiks
[i
][2], rubiks
[i
][3]); printf("\n %c%c\n %c%c\n", rubiks
[5][0], rubiks
[5][1], rubiks
[5][2], rubiks
[5][3]); }
// Return 1 if the Rubik's Cube is solved, otherwise return 0
int isSolved() {
int status = 0;
for (int i=0; i<6; i++) {
for (int j=1; j<4; j++) if (rubiks[i][0] != rubiks[i][j]) return 0;
for (int j=0; j<6; j++) {
if (colors[j] == rubiks[i][0]) {
status |= (1<<j);
break;
}
}
}
return ((1 << 6) - 1 == status);
}
// Return 1 if the Rubik's Cube can be solved within n moves, otherwise return 0
int solve(int n) {
// TODO: utilize move(), printRubiks(), isSolved() to implement the function
return 0;
}
int main() {
int t;
while (t--) {
readRubiksState();
printf("%s", (solve
(n
) ? "Yes\n" : "No\n")); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNkZWZpbmUgVVAgMAojZGVmaW5lIExFRlQgMQojZGVmaW5lIEZST05UIDIKI2RlZmluZSBSSUdIVCAzCiNkZWZpbmUgQkFDSyA0CiNkZWZpbmUgRE9XTiA1CgpjaGFyIHJ1Ymlrc1s2XVs0XTsKY2hhciByb3RhdGVJbmRleFs2XVszXVs0XVsyXSA9IHsKICAgIHt7ezAsIDB9LCB7MCwgMn0sIHswLCAzfSwgezAsIDF9fSwge3sxLCAwfSwgezIsIDB9LCB7MywgMH0sIHs0LCAwfX0sIHt7MSwgMX0sIHsyLCAxfSwgezMsIDF9LCB7NCwgMX19fSwKICAgIHt7ezEsIDB9LCB7MSwgMn0sIHsxLCAzfSwgezEsIDF9fSwge3s0LCAxfSwgezUsIDJ9LCB7MiwgMn0sIHswLCAyfX0sIHt7NCwgM30sIHs1LCAwfSwgezIsIDB9LCB7MCwgMH19fSwKICAgIHt7ezIsIDB9LCB7MiwgMn0sIHsyLCAzfSwgezIsIDF9fSwge3sxLCAxfSwgezUsIDB9LCB7MywgMn0sIHswLCAzfX0sIHt7MSwgM30sIHs1LCAxfSwgezMsIDB9LCB7MCwgMn19fSwKICAgIHt7ezMsIDB9LCB7MywgMn0sIHszLCAzfSwgezMsIDF9fSwge3syLCAxfSwgezUsIDF9LCB7NCwgMn0sIHswLCAxfX0sIHt7MiwgM30sIHs1LCAzfSwgezQsIDB9LCB7MCwgM319fSwKICAgIHt7ezQsIDB9LCB7NCwgMn0sIHs0LCAzfSwgezQsIDF9fSwge3szLCAxfSwgezUsIDN9LCB7MSwgMn0sIHswLCAwfX0sIHt7MywgM30sIHs1LCAyfSwgezEsIDB9LCB7MCwgMX19fSwKICAgIHt7ezUsIDB9LCB7NSwgMn0sIHs1LCAzfSwgezUsIDF9fSwge3sxLCAzfSwgezQsIDN9LCB7MywgM30sIHsyLCAzfX0sIHt7MSwgMn0sIHs0LCAyfSwgezMsIDJ9LCB7MiwgMn19fQp9OwpjaGFyIGNvbG9yc1s2XSA9IHsnVycsICdPJywgJ0InLCAnRycsICdZJywgJ1InfTsKaW50IG47Cgp2b2lkIHJlYWRSdWJpa3NTdGF0ZSgpIHsKICAgIGNoYXIgc3RhdGVbMzBdOwogICAgc2NhbmYoIiVkICVzIiwgJm4sIHN0YXRlKTsKICAgIGZvciAoaW50IGk9MDsgaTw2OyBpKyspIHsKICAgICAgICBmb3IgKGludCBqPTA7IGo8NDsgaisrKSB7CiAgICAgICAgICAgIHJ1Ymlrc1tpXVtqXSA9IHN0YXRlW2kgKiA0ICsgal07CiAgICAgICAgfQogICAgfQp9CgovLyBQYXNzIFVQL0xFRlQvRlJPTlQvUklHSFQvQkFDSy9ET1dOIGFzIHBhcmFtZXRlcnMgdG8gcGVyZm9ybSB0aGUgbW92ZQp2b2lkIG1vdmUoaW50IGZhY2UpIHsKICAgIGZvciAoaW50IGk9MDsgaTwzOyBpKyspIHsKICAgICAgICBmb3IgKGludCBqPTA7IGo8MzsgaisrKSB7CiAgICAgICAgICAgIGludCBheCA9IHJvdGF0ZUluZGV4W2ZhY2VdW2ldW2pdWzBdOwogICAgICAgICAgICBpbnQgYXkgPSByb3RhdGVJbmRleFtmYWNlXVtpXVtqXVsxXTsKICAgICAgICAgICAgaW50IGJ4ID0gcm90YXRlSW5kZXhbZmFjZV1baV1baisxXVswXTsKICAgICAgICAgICAgaW50IGJ5ID0gcm90YXRlSW5kZXhbZmFjZV1baV1baisxXVsxXTsKICAgICAgICAgICAgY2hhciB0bXAgPSBydWJpa3NbYXhdW2F5XTsKICAgICAgICAgICAgcnViaWtzW2F4XVtheV0gPSBydWJpa3NbYnhdW2J5XTsKICAgICAgICAgICAgcnViaWtzW2J4XVtieV0gPSB0bXA7CiAgICAgICAgfQogICAgfQp9CgovLyBQcmludCB0aGUgUnViaWsncyBDdWJlIHN0YXRlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKdm9pZCBwcmludFJ1YmlrcygpIHsKICAgIHByaW50ZigiICAlYyVjXG4gICVjJWNcbiIsIHJ1Ymlrc1swXVswXSwgcnViaWtzWzBdWzFdLCBydWJpa3NbMF1bMl0sIHJ1Ymlrc1swXVszXSk7CiAgICBmb3IgKGludCBpPTE7IGk8NTsgaSsrKSBwcmludGYoIiVjJWMiLCBydWJpa3NbaV1bMF0sIHJ1Ymlrc1tpXVsxXSk7CiAgICBwcmludGYoIlxuIik7CiAgICBmb3IgKGludCBpPTE7IGk8NTsgaSsrKSBwcmludGYoIiVjJWMiLCBydWJpa3NbaV1bMl0sIHJ1Ymlrc1tpXVszXSk7CiAgICBwcmludGYoIlxuICAlYyVjXG4gICVjJWNcbiIsIHJ1Ymlrc1s1XVswXSwgcnViaWtzWzVdWzFdLCBydWJpa3NbNV1bMl0sIHJ1Ymlrc1s1XVszXSk7Cn0KCi8vIFJldHVybiAxIGlmIHRoZSBSdWJpaydzIEN1YmUgaXMgc29sdmVkLCBvdGhlcndpc2UgcmV0dXJuIDAKaW50IGlzU29sdmVkKCkgewogICAgaW50IHN0YXR1cyA9IDA7CiAgICBmb3IgKGludCBpPTA7IGk8NjsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaj0xOyBqPDQ7IGorKykgaWYgKHJ1Ymlrc1tpXVswXSAhPSBydWJpa3NbaV1bal0pIHJldHVybiAwOwogICAgICAgIGZvciAoaW50IGo9MDsgajw2OyBqKyspIHsKICAgICAgICAgICAgaWYgKGNvbG9yc1tqXSA9PSBydWJpa3NbaV1bMF0pIHsKICAgICAgICAgICAgICAgIHN0YXR1cyB8PSAoMTw8aik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAoKDEgPDwgNikgLSAxID09IHN0YXR1cyk7Cn0KCi8vIFJldHVybiAxIGlmIHRoZSBSdWJpaydzIEN1YmUgY2FuIGJlIHNvbHZlZCB3aXRoaW4gbiBtb3Zlcywgb3RoZXJ3aXNlIHJldHVybiAwCmludCBzb2x2ZShpbnQgbikgewogICAgLy8gVE9ETzogdXRpbGl6ZSBtb3ZlKCksIHByaW50UnViaWtzKCksIGlzU29sdmVkKCkgdG8gaW1wbGVtZW50IHRoZSBmdW5jdGlvbgogICAgcmV0dXJuIDA7Cn0KCmludCBtYWluKCkgewogICAgaW50IHQ7CiAgICBzY2FuZigiJWQiLCAmdCk7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgcmVhZFJ1Ymlrc1N0YXRlKCk7CiAgICAgICAgcHJpbnRmKCIlcyIsIChzb2x2ZShuKSA/ICJZZXNcbiIgOiAiTm9cbiIpKTsKICAgIH0KICAgIHJldHVybiAwOwp9