// @BEGIN_OF_SOURCE_CODE /* @JUDGE_ID: 17243NT 161 C++ "Simulate" */ // Send to judge@uva.es #include #include #include #ifdef ONLINE_JUDGE #define ins cin #define outs cout #else #define ins fin #define outs fout ifstream fin("myprog.in"); ofstream fout("myprog.out"); #endif int gt[110]; bool stats[110]; int time[110]; bool init; int nlights, total; int sec; void green(int i); void ungreen(int i); int main() { int i; while(ins >> gt[0] >> gt[1] >> gt[2]) { if(gt[0] == 0 && gt[1] == 0 && gt[2] == 0) break; if(gt[2] == 0) { nlights = 2; } else { nlights = 3; for(;;) { ins >> gt[nlights]; if(gt[nlights] == 0) break; nlights++; } } init = true; total = 0; sec = 0; for(i = 0; i < nlights; i++) green(i); for(;;) { sec++; for(i = 0; i < nlights; i++) { if(--time[i] <= 0) { if(stats[i]) ungreen(i); else green(i); } } if(sec > 18000) { outs << "Signals fail to synchronise in 5 hours\n"; break; } else if(!init && total == nlights) { int hr = sec / 3600; int min = (sec / 60) % 60; sec = sec % 60; if(hr == 0) outs << "00"; else if(hr < 10) outs << "0" << hr; else outs << hr; outs << ":"; if(min == 0) outs << "00"; else if(min < 10) outs << "0" << min; else outs << min; outs << ":"; if(sec == 0) outs << "00"; else if(sec < 10) outs << "0" << sec; else outs << sec; outs << "\n"; break; } } } return 0; } void green(int i) { total++; stats[i] = true; time[i] = gt[i] - 5; } void ungreen(int i) { init = false; total--; stats[i] = false; time[i] = gt[i] + 5; } // @END_OF_SOURCE_CODE