범죄자가 갖추어야 할 중요한 것 중 하나는 알리바이입니다. 알리바이란 범행이 일어난 시각에 그 사람이 다른 장소에서 목격되었다는 확인을 뜻하며, 이는 그 사람을 용의선상에서 제외시킵니다.
알리바이는 보통 어떤 목격자가 “나는 시각 $Y$부터 $Z$까지 장소 $X$에서 그 사람을 보았다”라고 진술하는 형태입니다. 그 시간 구간이 범행 시각을 포함하고, 경찰이 그 목격자를 의심할 이유가 없다면, 이는 용의자가 범행을 저지를 수 없었음을 증명합니다.
목격자를 의심하는 유일한 이유는 다음과 같습니다. 다른 목격자가 같은 사람을 겹치는 시간대에 서로 다른 장소에서 보았다고 주장하는 경우입니다. 두 목격자 $A$와 $B$가 같은 용의자 $X$를 서로 다른 장소에서, 겹치는 시간 구간 동안 보았다고 주장하면, $A$와 $B$는 모두 처음부터 존재하지 않았던 것처럼 완전히 무시합니다. (믿을 수 없는 목격자의 진술은 유죄를 증명하지도 않습니다.)
목격자들의 알리바이를 이용하되 믿을 수 없는 목격자를 모두 배제하여, 초기 용의자 집합을 좁히는 프로그램을 작성하세요.
첫째 줄에 데이터 집합의 개수 $K$가 주어집니다. 이어서 $K$개의 데이터 집합이 다음 형식으로 주어집니다.
각 데이터 집합의 첫째 줄에는 네 정수 $s, w, p, t$가 주어집니다. $1 \le s \le 50$은 용의자 수, $1 \le w \le 200$은 목격자 수, $1 \le p \le 50$은 가능한 장소의 수, $0 \le t \le 1000$은 범행 시각입니다.
이어서 $w$개의 줄에 각 목격자의 진술이 네 정수 $S_i, P_i, b_i, f_i$로 주어집니다. $1 \le S_i \le s$는 목격했다고 주장하는 용의자의 번호, $1 \le P_i \le p$는 목격 장소, $[b_i, f_i]$는 목격한 시간 구간입니다. 모든 값은 정수입니다.
각 데이터 집합마다 먼저 한 줄에 “Data Set x:”를 출력합니다. 여기서 $x$는 데이터 집합의 번호입니다. 그다음 줄부터, 여전히 용의선상에 있는 용의자들(유효한 알리바이가 없는 용의자들)을 한 줄에 하나씩 오름차순으로 출력합니다. 모든 용의자가 알리바이를 가지고 있다면 대신 “No suspect.”를 출력합니다. 연속된 두 데이터 집합의 출력 사이에는 빈 줄을 하나씩 넣습니다.