날짜 버그

시간 제한1초메모리 제한128 MB

요약
여러 컴퓨터가 표시하는 연도와 각자의 되감기 매개변수가 주어질 때, 모든 컴퓨터와 모순되지 않는 가장 이른 실제 연도를 10000 미만에서 찾는다.
난이도

보통10점 중 4점

유형
완전 탐색, 수학, 구현, 정수론
정답자
아직 제출이 없습니다

문제

많은 컴퓨터는 연도를 적은 자리수나 고정 크기의 카운터로 저장하기 때문에, 어느 시점이 지나면 표시되는 연도가 되돌아가 버립니다. 예를 들어 연도를 두 자리로만 표시하는 컴퓨터는 1999년 다음에 1900년으로 되돌아갑니다. 또 어떤 시스템은 특정 기준 시각 이후 흐른 초를 32비트 정수로 저장하는데, 약 2322^{32}초(대략 136년)가 지나면 값이 다시 기준 시각으로 되돌아갑니다.

각 컴퓨터 ii에는 '버그가 발생하는 연도' bib_i가 있습니다. 실제 연도가 bib_i보다 작을 때는 연도를 올바르게 표시하지만, 실제 연도가 bib_i에 도달하는 순간 표시값이 bib_i 대신 aia_i로 되돌아가고, 이후에도 다시 bib_i가 될 때마다 같은 방식으로 되돌아갑니다. 따라서 컴퓨터 ii가 표시할 수 있는 연도는 항상 [ai,bi)[a_i, b_i) 범위 안에 있으며, 실제 연도가 YY일 때의 표시값은 다음과 같습니다.

displayi(Y)=ai+((Y−ai) mod (bi−ai))\text{display}_i(Y) = a_i + \big((Y - a_i) \bmod (b_i - a_i)\big)

여러 대의 컴퓨터가 각각 현재 표시하고 있는 연도 yiy_i와 버그 정보 aia_i, bib_i를 알려 줍니다. 모든 컴퓨터가 같은 실제 연도를 가리킨다고 가정할 때, 모든 컴퓨터와 모순되지 않는 가장 이른 실제 연도를 구하세요. 컴퓨터는 aia_i보다 이전 연도를 표시할 수 없고 자신이 만들어지기 전의 연도일 수도 없으므로, 실제 연도는 항상 모든 aia_i 중 최댓값 이상입니다.

입력

입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스는 컴퓨터의 수를 나타내는 정수 nn (1≤n≤201 \le n \le 20)이 적힌 줄로 시작합니다. 이어지는 nn개의 줄에는 각 컴퓨터에 대한 세 정수 yiy_i, aia_i, bib_i가 주어집니다 (0≤ai≤yi<bi<100000 \le a_i \le y_i < b_i < 10000). yiy_i는 컴퓨터가 표시하는 연도, bib_i는 버그가 처음 발생하는(그 컴퓨터가 더 이상 표시할 수 없는 첫) 연도, aia_i는 그 대신 되돌아가는 연도입니다.

입력은 n=0n = 0인 테스트 케이스로 끝나며, 이 케이스는 처리하지 않습니다.

출력

kk번째 테스트 케이스에 대해 먼저 Case #k:를 출력합니다. 모든 컴퓨터를 만족하는 실제 연도가 존재하면, 그런 연도 중 모든 aia_i의 최댓값 이상이면서 가장 작은 값 zz에 대해 The actual year is z.를 출력합니다. 그런 연도가 10000년 미만에 존재하지 않으면 대신 Unknown bugs detected.를 출력합니다. 서로 다른 테스트 케이스 사이에는 빈 줄을 하나 출력합니다.

예제2

  1. 예제 1

    입력
    2
    1941 1900 2000
    2005 1904 2040
    2
    1998 1900 2000
    1999 1900 2000
    0
    
    예상 출력
    Case #1:
    The actual year is 2141.
    
    Case #2:
    Unknown bugs detected.
    
  2. 예제 2

    입력
    1
    1941 1900 2000
    0
    
    예상 출력
    Case #1:
    The actual year is 1941.