아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

완벽한 알리바이

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

요약
각 목격자가 용의자, 장소, 시간 구간을 제시한다. 서로 모순되는 목격자 쌍은 버리고, 범행 시각을 포함하는 살아남은 진술이 없는 용의자를 오름차순으로 출력한다.
난이도

보통10점 중 5점

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

문제

범죄자가 갖추어야 할 중요한 것 중 하나는 알리바이입니다. 알리바이란 범행이 일어난 시각에 그 사람이 다른 장소에서 목격되었다는 확인을 뜻하며, 이는 그 사람을 용의선상에서 제외시킵니다.

알리바이는 보통 어떤 목격자가 “나는 시각 YY부터 ZZ까지 장소 XX에서 그 사람을 보았다”라고 진술하는 형태입니다. 그 시간 구간이 범행 시각을 포함하고, 경찰이 그 목격자를 의심할 이유가 없다면, 이는 용의자가 범행을 저지를 수 없었음을 증명합니다.

목격자를 의심하는 유일한 이유는 다음과 같습니다. 다른 목격자가 같은 사람을 겹치는 시간대에 서로 다른 장소에서 보았다고 주장하는 경우입니다. 두 목격자 AA와 BB가 같은 용의자 XX를 서로 다른 장소에서, 겹치는 시간 구간 동안 보았다고 주장하면, AA와 BB는 모두 처음부터 존재하지 않았던 것처럼 완전히 무시합니다. (믿을 수 없는 목격자의 진술은 유죄를 증명하지도 않습니다.)

목격자들의 알리바이를 이용하되 믿을 수 없는 목격자를 모두 배제하여, 초기 용의자 집합을 좁히는 프로그램을 작성하세요.

입력

첫째 줄에 데이터 집합의 개수 KK가 주어집니다. 이어서 KK개의 데이터 집합이 다음 형식으로 주어집니다.

각 데이터 집합의 첫째 줄에는 네 정수 s,w,p,ts, w, p, t가 주어집니다. 1≤s≤501 \le s \le 50은 용의자 수, 1≤w≤2001 \le w \le 200은 목격자 수, 1≤p≤501 \le p \le 50은 가능한 장소의 수, 0≤t≤10000 \le t \le 1000은 범행 시각입니다.

이어서 ww개의 줄에 각 목격자의 진술이 네 정수 Si,Pi,bi,fiS_i, P_i, b_i, f_i로 주어집니다. 1≤Si≤s1 \le S_i \le s는 목격했다고 주장하는 용의자의 번호, 1≤Pi≤p1 \le P_i \le p는 목격 장소, [bi,fi][b_i, f_i]는 목격한 시간 구간입니다. 모든 값은 정수입니다.

출력

각 데이터 집합마다 먼저 한 줄에 “Data Set x:”를 출력합니다. 여기서 xx는 데이터 집합의 번호입니다. 그다음 줄부터, 여전히 용의선상에 있는 용의자들(유효한 알리바이가 없는 용의자들)을 한 줄에 하나씩 오름차순으로 출력합니다. 모든 용의자가 알리바이를 가지고 있다면 대신 “No suspect.”를 출력합니다. 연속된 두 데이터 집합의 출력 사이에는 빈 줄을 하나씩 넣습니다.

예제1

  1. 예제 1

    입력
    2
    3 5 3 12
    1 1 0 5
    1 2 4 10
    1 3 13 19
    2 1 0 12
    3 3 13 20
    1 4 3 7
    1 1 0 8
    1 1 4 10
    1 2 9 13
    1 3 11 15
    
    예상 출력
    Data Set 1:
    1
    3
    
    Data Set 2:
    No suspect.