각 테이블이 보는 테이블을 목록 또는 여집합으로 받아 가시성 그래프를 만든 뒤, 각 연결 요소를 BFS 거리의 홀짝으로 2색칠해 배정을 출력한다.
어려움8그래프BFS구현아직 제출이 없습니다시간 제한10초메모리 제한512 MB긴 선거 운동이 끝났다. 스프라이트당의 퐁과 바이러스당의 메가바이트 중 누가 이겼는지는 이제 표를 세기만 하면 정해진다.
개표는 탁자 t개가 놓인 방에서 한다. 탁자마다 개표원이 한 명씩 앉아 표를 센다. 두 정당은 개표가 공정하게 진행되는지 지켜볼 사람을 방에 들여보낼 수 있고, 이 사람을 참관인이라고 한다. 탁자마다 두 당의 참관인이 한 명씩 앉으면 가장 좋겠지만, 방이 좁아서 탁자 하나에 참관인은 한 명만 앉을 수 있다.
참관인을 어떻게 배치할지 정해야 한다. 탁자마다 스프라이트당과 바이러스당 중 한쪽의 참관인을 정확히 한 명 배치한다. 가까이 붙은 탁자끼리는 함께 감시할 수 있다. 참관인은 자기가 앉은 탁자와 그 탁자에서 보이는 모든 탁자의 개표를 감시한다. 모든 탁자를 스프라이트당 참관인이 적어도 한 명, 바이러스당 참관인이 적어도 한 명 감시하면 그 배치를 공정한 배치라고 한다.
개표원은 각자 탁자 번호를 적은 목록을 냈다. 어떤 개표원은 자기 탁자에서 보이는 탁자를 적었고, 나머지 개표원은 보이지 않는 탁자를 적었다.
공정한 배치를 찾아라.
첫째 줄에 탁자의 개수 t (1≤t≤200000)가 주어진다.
다음 t개 줄에 개표원이 낸 목록이 한 줄에 하나씩 주어진다. 각 줄은 목록의 종류를 뜻하는 문자 p와 목록의 길이 k (0≤k≤t−1)로 시작하고, 이어서 서로 다른 정수 a1,…,ak (1≤ai≤t)가 주어진다. p는 C 또는 N이다.
p가 C이면 이 탁자의 참관인은 a1,…,ak번 탁자만 감시할 수 있고 다른 탁자는 감시할 수 없다. p가 N이면 이 탁자의 참관인은 a1,…,ak번 탁자를 뺀 모든 탁자를 감시할 수 있다. 참관인은 자기가 앉은 탁자를 늘 감시하므로 목록에는 자기 탁자의 번호가 들어 있지 않다.
탁자를 설명하는 줄은 1번 탁자부터 t번 탁자까지 차례대로 주어진다. x번 탁자의 참관인이 y번 탁자를 감시할 수 있으면 y번 탁자의 참관인도 x번 탁자를 감시할 수 있다. 모든 목록의 길이를 더한 값은 500000 이하이다.
공정한 배치가 없으면 Impossible을 출력한다.
공정한 배치가 있으면 길이가 t인 문자열을 출력한다. 스프라이트당 참관인은 S, 바이러스당 참관인은 V로 적고, i번째 문자는 i번 탁자의 참관인을 뜻한다.
공정한 배치는 여러 가지일 수 있으므로 다음 배치를 출력한다. 서로 감시할 수 있는 두 탁자를 이웃이라고 하고, 이웃으로 이어지는 탁자끼리 한 덩어리로 묶는다. 각 덩어리에서 번호가 가장 작은 탁자를 r이라고 하고, 이웃을 따라 r에서 i번 탁자까지 가는 가장 짧은 경로의 단계 수를 di라고 하자. 즉 dr=0이다. di가 짝수이면 i번째 문자는 S, 홀수이면 V이다.