#include #include char *cis[10][7] = { {"+---+", "| |", "| |", "+ +", "| |", "| |", "+---+", }, {" +", " |", " |", " +", " |", " |", " +", }, {"+---+", " |", " |", "+---+", "| ", "| ", "+---+", }, {"+---+", " |", " |", "+---+", " |", " |", "+---+", }, {"+ +", "| |", "| |", "+---+", " |", " |", " +", }, {"+---+", "| ", "| ", "+---+", " |", " |", "+---+", }, {"+---+", "| ", "| ", "+---+", "| |", "| |", "+---+", }, {"+---+", " |", " |", " +", " |", " |", " +", }, {"+---+", "| |", "| |", "+---+", "| |", "| |", "+---+", }, {"+---+", "| |", "| |", "+---+", " |", " |", "+---+", } }; int can[4][11]; char line[1000]; int main() { while(1) { fgets(line, 1000, stdin); if (strlen(line)<2) { continue; } //printf("%s", line); if (!strcmp(line,"end\n")) { printf("end\n"); return 0; } //printf("%s", line); for (int i=0; i<10; i++) for (int j=0; j<4; j++) can[j][i] = 1; for(int i=0; i<7; i++) { int ccur=-7; for (int j=0; j<4; j++) { ccur+=7; if (j==2) ccur+=3; for (int k=0; k<10; k++) { int cur = ccur; if (can[j][k]) { for (int z=0; z<5; z++, cur++) { // putchar(line[cur]); if (line[cur]=='.') continue; else if (line[cur]!=cis[k][i][z]) { //if (j==0) // printf("<%d %d %d %c %c >", j, k, i, line[cur], cis[k][i][z]); can[j][k] = 0; break; } } } //printf("\n"); } } fgets(line, 1000, stdin); } int res[4]; int good = 1; for (int i=3;i<10; i++) can[0][i] = 0; for (int i=6;i<10; i++) can[2][i] = 0; bool first = (can[0][0]||can[0][1]) && can[0][2]; bool sl5 = false, se5 = false; for (int i=0; i<10; i++) if (can[1][i]) { //printf("%d", i); if (i<4) sl5=true; else se5=true; } if (first && sl5 && se5){ printf("ambiguous\n"); continue;} else if (first && se5) { can[0][2]= 0 ; } for (int i=0; i<4; i++) { res[i] = -1; for (int j=0; j<10; j++) if (can[i][j]) { // printf("|%d %d|", i,j); if (res[i]!=-1) { good=0; //printf("%d..",i); } else res[i] = j; } } if (good) printf("%d%d:%d%d\n", res[0], res[1], res[2], res[3]); else printf("ambiguous\n"); } return 0; }