#include <iostream>
#include <cstring>
'你累吗?
using namespace std;
int ans = 0;
int stack[20][8];
void populate(int val, int *x) {
for (int i = 0; i < 6; ++i) {
x[i] = val % 3;
val /= 3;
}
}
bool consist(int *a, int *b, int *c) {
for (int i = 0; i < 6; ++i) {
if (a[i] != b[i] && a[i] != c[i] && b[i] != c[i]) return true;
}
return false;
}
bool check_stack(int dep) {
for (int i = 0; i < dep - 2; ++i)
for (int j = i+1; j < dep - 1; ++j) {
if (!consist(stack[i], stack[j], stack[dep - 1])) return false;
}
return true;
}
void dfs(int dep, int last) {
if (dep > ans) {
ans = dep;
cout << "Solution:" << ans << endl;
for (int i = 0; i < dep; ++i) {
for (int j = 0; j < 6; ++j)
cout << stack[i][j];
cout << endl;
}
}
for (int j = last + 1; j < 729; ++j) {
populate(j, stack[dep]);
if (check_stack(dep + 1))
dfs(dep + 1, j);
}
}
int main() {
populate(0, stack[0]);
int person2_choose[] = {4, 13, 40, 121};
for (int i = 0; i < 4; ++i) {
cout << "Now at " << i << endl;
populate(person2_choose[i], stack[1]);
dfs(2, i);
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KJ+S9oOe0r+WQl++8nwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmludCBhbnMgPSAwOwppbnQgc3RhY2tbMjBdWzhdOwoKCnZvaWQgcG9wdWxhdGUoaW50IHZhbCwgaW50ICp4KSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7ICsraSkgewogICAgICAgIHhbaV0gPSB2YWwgJSAzOwogICAgICAgIHZhbCAvPSAzOwogICAgfQogICAgICAgIAp9Cgpib29sIGNvbnNpc3QoaW50ICphLCBpbnQgKmIsIGludCAqYykgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyArK2kpIHsKICAgICAgICBpZiAoYVtpXSAhPSBiW2ldICYmIGFbaV0gIT0gY1tpXSAmJiBiW2ldICE9IGNbaV0pIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9Cgpib29sIGNoZWNrX3N0YWNrKGludCBkZXApIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVwIC0gMjsgKytpKQogICAgICAgIGZvciAoaW50IGogPSBpKzE7IGogPCBkZXAgLSAxOyArK2opIHsKICAgICAgICAgICAgaWYgKCFjb25zaXN0KHN0YWNrW2ldLCBzdGFja1tqXSwgc3RhY2tbZGVwIC0gMV0pKSByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCnZvaWQgZGZzKGludCBkZXAsIGludCBsYXN0KSB7CiAgICBpZiAoZGVwID4gYW5zKSB7CiAgICAgICAgYW5zID0gZGVwOwogICAgICAgIGNvdXQgPDwgIlNvbHV0aW9uOiIgPDwgYW5zIDw8IGVuZGw7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXA7ICsraSkgewogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDY7ICsraikKICAgICAgICAgICAgICAgIGNvdXQgPDwgc3RhY2tbaV1bal07CiAgICAgICAgICAgIGNvdXQgPDwgZW5kbDsKICAgICAgICB9CiAgICAgICAgCiAgICB9CgogICAgZm9yIChpbnQgaiA9IGxhc3QgKyAxOyBqIDwgNzI5OyArK2opIHsKICAgICAgICBwb3B1bGF0ZShqLCBzdGFja1tkZXBdKTsKICAgICAgICBpZiAoY2hlY2tfc3RhY2soZGVwICsgMSkpCiAgICAgICAgICAgIGRmcyhkZXAgKyAxLCBqKTsKICAgIH0KfQoKCmludCBtYWluKCkgewogICAgcG9wdWxhdGUoMCwgc3RhY2tbMF0pOwoKICAgIGludCBwZXJzb24yX2Nob29zZVtdID0gezQsIDEzLCA0MCwgMTIxfTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7Cgljb3V0IDw8ICJOb3cgYXQgIiA8PCBpIDw8IGVuZGw7CiAgICAgICAgcG9wdWxhdGUocGVyc29uMl9jaG9vc2VbaV0sIHN0YWNrWzFdKTsKICAgICAgICBkZnMoMiwgaSk7CiAgICB9CiAgICAKCiAgICByZXR1cm4gMDsKfQ==