#include #include using namespace std; #define MAX_INT 1000000000 const char c0[7][6] = { "+---+", "| |", "| |", "+ +", "| |", "| |", "+---+" }; const char c1[7][6] = { " +", " |", " |", " +", " |", " |", " +" }; const char c2[7][6] = { "+---+", " |", " |", "+---+", "| ", "| ", "+---+" }; const char c3[7][6] = { "+---+", " |", " |", "+---+", " |", " |", "+---+" }; const char c4[7][6] = { "+ +", "| |", "| |", "+---+", " |", " |", " +" }; const char c5[7][6] = { "+---+", "| ", "| ", "+---+", " |", " |", "+---+" }; const char c6[7][6] = { "+---+", "| ", "| ", "+---+", "| |", "| |", "+---+" }; const char c7[7][6] = { "+---+", " |", " |", " +", " |", " |", " +" }; const char c8[7][6] = { "+---+", "| |", "| |", "+---+", "| |", "| |", "+---+" }; const char c9[7][6] = { "+---+", "| |", "| |", "+---+", " |", " |", "+---+" }; const char cd[7][2] = { " ", " ", "o", " ", "o", " ", " " }; int rozdilu(const char* rcislo, int r, int c) { int i, rozd = 0; const char * tcislo; switch(c){ case 0: tcislo = c0[r]; break; case 1: tcislo = c1[r]; break; case 2: tcislo = c2[r]; break; case 3: tcislo = c3[r]; break; case 4: tcislo = c4[r]; break; case 5: tcislo = c5[r]; break; case 6: tcislo = c6[r]; break; case 7: tcislo = c7[r]; break; case 8: tcislo = c8[r]; break; case 9: tcislo = c9[r]; break; } for(i = 0;i<6;++i) { if(rcislo[i] == '.' && rcislo[i] != tcislo[i]) rozd++; } return rozd; } void test(const char*rcislo, int r, bool*mozn) { int i; int rozd[10]; for(i=0;i<10;++i) { if(mozn[i]) { rozd[i] = rozdilu(rcislo, r, i); } else rozd[i] = MAX_INT; } // min int min = MAX_INT; for(i=0;i<10;++i) { if(rozd[i] < min) min = rozd[i]; } for(i=0;i<10;++i) { if(rozd[i] > min) mozn[i] = false; } } int main() { string s; while(true) { getline(cin,s); if(s == "end") { cout << "end" << endl; return 0; } int r,p,q; bool moznosti[/*p*/4][/*mozn*/10]; for(p=0;p<4;p++) { for(q=0;q<10;q++) { if(p == 1 || p == 3) moznosti[p][q] = true; else if(p == 0) { if(q < 3) moznosti[p][q] = true; else moznosti[p][q] = false; } else if(p == 2) { if(q < 6) moznosti[p][q] = true; else moznosti[p][q] = false; } } } for(r = 0;r < 7;r++) { int pos; for(pos = 0;pos<4;++pos) { int realpos; switch(pos) { case 0: realpos = 0; break; case 1: realpos = 7; break; case 2: realpos = 17; break; case 3: realpos = 24; break; } test(s.c_str()+realpos, r, moznosti[pos]); } } int k; int numtr = 0; bool jetovprdeli = false; int whichtrue[4] = {0,0,0,0}; int l; for(l=0;l<4;++l) { numtr = 0; jetovprdeli = false; for(k=0;k<10;++k) { if(moznosti[l][k]) { numtr++; whichtrue[l] = k; } if(numtr > 0) jetovprdeli = true; } } if(jetovprdeli) { cout << "ambiguous" << endl; } else { cout << whichtrue[0] << whichtrue[1] << ":" << whichtrue[2] << whichtrue[3] << endl; } getline(cin,s); getline(cin,s); } return 0; }