모터사이클 경주 조직위원회가 대회 지도에 라벨을 붙이려 한다. 지도에는 장소 n개가 있고, 각 장소에는 0번부터 n−1번까지 번호가 붙어 있다. 모든 도로는 양방향이고 서로 다른 두 장소를 잇는다.
각 장소에는 일반을 뜻하는 0이나 지원을 뜻하는 1을 라벨로 붙인다. 장소 i에 닿아 있는 도로가 di개일 때, 장소 i와 라벨이 같은 이웃은 최대 ⌊di/2⌋개까지만 허용한다. 이 조건을 지키는 라벨링은 보통 여러 가지이므로, 다음 절차가 만들어내는 라벨링 하나만 정답으로 인정한다.
라벨을 한 번 뒤집을 때마다 양 끝의 라벨이 서로 다른 도로의 수가 최소 1 늘어나므로, 이 절차는 항상 유한 번 만에 끝난다.
첫 줄에 장소의 수 n이 주어진다. (1≤n≤1000)
다음 n개 줄 가운데 i번째 줄은 장소 i를 설명한다. (i=0,1,…,n−1) 각 줄의 형식은 다음과 같다.
number_of_neighbors: neighbor1 neighbor2 ... neighborm
number_of_neighbors는 장소 i에 닿아 있는 도로의 수이고, 그 뒤에 이웃 장소의 번호가 공백으로 구분되어 나열된다. 2: 1 2는 이웃이 둘이고 그 번호가 1과 2라는 뜻이다.
한 도로가 같은 장소를 두 번 잇는 경우는 없고, 같은 두 장소를 잇는 도로도 하나뿐이다. 장소 a의 이웃 목록에 b가 있으면 장소 b의 이웃 목록에도 a가 있다. 이웃이 없는 장소의 줄은 콜론에서 끝난다.
첫 줄에 n을 출력한다. 이어서 n개 줄에 장소 0번부터 차례로 라벨을 붙여 출력한다. 각 줄의 형식은 다음과 같다.
label number_of_neighbors: neighbor1 neighbor2 ... neighborm
label은 일반이면 0, 지원이면 1이다. 이웃 목록은 입력에 주어진 순서 그대로 출력한다. 토큰 사이는 공백 하나로 구분하고, 콜론은 number_of_neighbors 바로 뒤에 붙여 쓴다. 이웃이 없는 장소의 줄은 콜론에서 끝난다.