#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define FOR(i,n) for (int i=0; i<(n); i++) #define FORTO(i,a,b) for (int i=(a); i<=(b); i++) #define FORD(i,n) for (int i = (n)-1; i>=0; i--) #define DEBUG(x) cout << '>' << #x << ':' << x << endl; #define SIZE(x) int(x.size()) typedef pair PII; typedef long long ll; char digits[10][8] = { "-||.||-", "..|..|.", "-.|-|.-", "-.|-.|-", ".||-.|.", "-|.-.|-", "-|.-||-", "-.|..|.", "-||-||-", "-||-.|-" }; char leadingZero[8] = "......."; const int pos[4][7] = { {0,4,5,12,16,17,24}, {1,6,7,13,18,19,25}, {2,8,9,14,20,21,26}, {3,10,11,15,22,23,27} }; bool CanBe[107][24*60]; bool CanBeDigit[4][10]; int Dw[107]; int Up[107]; char input[47]; bool testDigit(int p, int d) { char *vzor = digits[d]; if (p == 0 && d == 0) vzor = leadingZero; FOR(i,7) { if (input[ pos[p][i] ] == '?') continue; if (input[ pos[p][i] ] != vzor[i]) return false; } return true; } void load() { int mam = 0; while (mam < 28) { char c = getchar(); if (c == '.' || c == '-' || c == '|' || c == '?') { input[mam++] = c; } } } int main() { while (true) { int C; scanf("%d", &C); if (!C) return 0; FOR(c,C) { if (c > 0) scanf("%d %d", &Dw[c-1], &Up[c-1]); load(); // DEBUG(input); FOR(i,4) FOR(d,10) CanBeDigit[i][d] = testDigit(i,d); //FOR(i,10) DEBUG(CanBeDigit[3][i]); FOR(h,24) FOR(m,60) { CanBe[c][h*60+m] = true; CanBe[c][h*60+m] &= CanBeDigit[0][h/10]; CanBe[c][h*60+m] &= CanBeDigit[1][h%10]; CanBe[c][h*60+m] &= CanBeDigit[2][m/10]; CanBe[c][h*60+m] &= CanBeDigit[3][m%10]; // if (CanBe[c][h*60+m]) { DEBUG(h); DEBUG(m); } } } FOR(c,C-1) { // DEBUG(Dw[c]); // DEBUG(Up[c]); FOR(i,24*60) if (CanBe[c+1][i]) { bool is = false; FORTO(j,Dw[c],Up[c]) { if (CanBe[c][(i-j+24*60)%(24*60)]) { is = true; break; } } if (!is) CanBe[c+1][i] = false; } } FORD(c,C-1) { FOR(i,24*60) if (CanBe[c][i]) { bool is = false; FORTO(j,Dw[c],Up[c]) { if (CanBe[c+1][(i+j)%(24*60)]) { is = true; break; } } if (!is) CanBe[c][i] = false; } } FOR(c,C) { int Sum = 0, First = -1; FOR(i,24*60) { if (CanBe[c][i]) { Sum++; First = i; } } if (Sum != 1) { printf("ambiguous, %d possibilities\n", Sum); } else { printf("%d:%02d\n", First/60,First%60); } } printf("\n"); } return 0; }