회의 일정 계획

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

요약
최대 20명의 일정이 주어질 때, 회의 내내 최대 한 명만 자리를 비우는 1시간 이상의 모든 최대 구간을 출력한다.
난이도

보통10점 중 7점

유형
구간, 정렬, 구현, 시뮬레이션
정답자
아직 제출이 없습니다

문제

컴퓨터 과학의 문제들은 흔히 NP, NP-완전, 결정 불가능 등 특정 문제 부류로 분류됩니다. 팀이 어떤 부류의 문제를 풀든, 항상 따라다니는 하나의 문제가 있습니다. 바로 모든 프로그래머가 함께 모여 프로젝트를 진행할 수 있는 시간을 찾는 일입니다.

각 팀원의 바쁜 일정표가 주어질 때, 팀이 회의할 수 있는 모든 시간대를 찾는 프로그램을 작성하세요.

입력

첫 줄에는 시나리오(scenario)의 수가 주어집니다.

각 시나리오는 먼저 팀원 수 mm(2≤m≤202 \le m \le 20)이 한 줄에 주어집니다. 각 팀원마다 일정표의 항목 수 nn(0≤n≤1000 \le n \le 100)이 적힌 줄이 주어지고, 이어서 다음 형식의 nn개 줄이 주어집니다.

YYYY MM DD hh mm ss YYYY MM DD hh mm ss some string here

각 줄에는 한 일정의 시작과 종료 각각에 대한 연·월·일·시·분·초와 일정 설명 문자열이 담겨 있습니다. 모든 숫자는 주어진 자리수에 맞춰 0으로 채워지며, 사이는 하나의 공백으로 구분됩니다. 설명 문자열은 공백을 포함할 수 있고 길이는 최대 100자입니다. 모든 날짜는 1800년 1월 1일 0시부터 2200년 1월 1일 0시 사이에 있습니다. 계산을 단순화하기 위해, 모든 달은 정확히 30일이라고 가정해도 되며, (1월 31일 같은) 잘못된 날짜는 나타나지 않습니다.

일정의 종료 시각은 해당 팀원이 다시 시간이 비어 회의에 참여할 수 있게 되는 시점임에 유의하세요.

출력

각 시나리오에 대해 먼저 Scenario #i: 줄을 출력합니다(ii는 1부터 시작하는 시나리오 번호). 그다음, 아래 조건을 모두 만족하는 회의 시간대마다 한 줄씩 출력합니다.

  • 회의 중 어느 순간에도 최소 두 명의 팀원이 참석하고 있어야 합니다.
  • 회의 중 어느 순간에도 결석하는 팀원은 최대 한 명이어야 합니다.
  • 회의 길이는 최소 한 시간이어야 합니다.
  • 모든 팀원은 하루 24시간 언제든 일할 의향이 있습니다.

예를 들어 팀원이 A, B, C 세 명이라면 다음은 유효한 회의입니다. 처음에는 A와 B만으로 시작하고, 나중에 C가 합류하며, 끝나기 전에 A가 빠져도 됩니다.

이 조건을 만족하는 가장 긴 시간대를 항상 출력하세요(그 길이가 400년에 이르더라도 마찬가지입니다). 각 줄은 날짜·시간 순으로 정렬하고, 다음 형식을 사용합니다.

appointment possible from MM/DD/YYYY hh:mm:ss to MM/DD/YYYY hh:mm:ss

월·일·연·시·분·초는 필요한 자리수까지 0으로 채워야 합니다. 회의가 불가능하면 no appointment possible만 적힌 한 줄을 출력합니다. 연속한 시나리오의 출력은 빈 줄로 구분합니다.

예제2

  1. 예제 1

    입력
    2
    3
    3
    2002 06 28 15 00 00 2002 06 28 18 00 00 TUD Contest Practice Session
    2002 06 29 10 00 00 2002 06 29 15 00 00 TUD Contest
    2002 11 15 15 00 00 2002 11 17 23 00 00 NWERC Delft
    4
    2002 06 25 13 30 00 2002 06 25 15 30 00 FIFA World Cup Semifinal I
    2002 06 26 13 30 00 2002 06 26 15 30 00 FIFA World Cup Semifinal II
    2002 06 29 13 00 00 2002 06 29 15 00 00 FIFA World Cup Third Place
    2002 06 30 13 00 00 2002 06 30 15 00 00 FIFA World Cup Final
    1
    2002 06 01 00 00 00 2002 06 29 18 00 00 Preparation of Problem Set
    2
    1
    1800 01 01 00 00 00 2200 01 01 00 00 00 Solving Problem 8
    0
    
    예상 출력
    Scenario #1:
    appointment possible from 01/01/1800 00:00:00 to 06/25/2002 13:30:00
    appointment possible from 06/25/2002 15:30:00 to 06/26/2002 13:30:00
    appointment possible from 06/26/2002 15:30:00 to 06/28/2002 15:00:00
    appointment possible from 06/28/2002 18:00:00 to 06/29/2002 10:00:00
    appointment possible from 06/29/2002 15:00:00 to 01/01/2200 00:00:00
    
    Scenario #2:
    no appointment possible
    
  2. 예제 2

    입력
    1
    2
    0
    0
    
    예상 출력
    Scenario #1:
    appointment possible from 01/01/1800 00:00:00 to 01/01/2200 00:00:00