사회공포증
시간 제한2초메모리 제한256 MB
빈 좌석이 가장 적은 칸에 승객을 배정하고, 반환으로 격차가 2 이상 벌어지면 가장 붐비는 칸에서 승객을 옮기는 과정을 시뮬레이션한 뒤 최종 배치를 출력한다.
문제
모든 사람이 붐비는 곳에 있는 것을 좋아하지는 않는다. 많은 사람이 혼자 있는 것을 선호하고, 심지어 그 대가를 지불할 의향도 있다. 그래서 ОАО "Радостные Железные Дороги"는 자사 표 판매 사이트에 "사회공포증"이라는 새 서비스를 도입했다. 이 서비스는 각 승객이 가능한 한 적은 수의 이웃과 함께 객실을 이용할 수 있게 해 주기 위한 것이다. 서비스의 내용은 다음과 같다.
어떤 객차에 표가 판매되는데, 그 객차의 일부 객실은 이미 채워져 있다고 하자. 어느 순간 이 객차의 표를 다음 승객이 사면, 그 승객에게는 가장 비어 있는 객실, 즉 사람 수가 다른 모든 객실보다 많지 않은 객실의 좌석이 팔린다. 그런 객실이 여러 개면 번호가 가장 작은 객실을 고른다. 어떤 객실의 승객이 표를 반납해서 그 객실과 가장 많이 찬 객실의 사람 수 차이가 2 이상이 되면, 가장 많이 찬 객실에서 빈 자리로 승객 한 명이 옮겨 앉는데, 그 객실에서 가장 먼저 표를 산 승객, 즉 번호가 가장 작은 승객이 옮겨 앉는다. 가장 많이 찬 객실이 여러 개면 그중 표를 반납한 객실에 가장 가까운 객실을 고른다. 그러한 객실도 여러 개면 번호가 가장 작은 객실을 고른다.
승객들이 표를 사고 반납한 기록이 주어졌을 때, 최종적으로 승객들이 어느 객실에 배치되는지 출력해야 한다. 어떤 승객이 표를 살 때마다 그 객차에 빈자리가 적어도 하나 있다고 보장된다.
입력
첫째 줄에 세 정수 m, n, k가 주어진다 (1 ≤ m ≤ 200000, 1 ≤ n, k ≤ 50000). m은 표 구매 또는 반납 연산의 수, n은 객차의 객실 수, k는 각 객실의 좌석 수이다. 다음 m개 줄에 표 구매와 반납의 순서가 주어진다.
줄에 '+' 한 글자만 있으면 이 객차의 표를 다음 승객이 산 것이며, 그 승객의 번호는 입력 파일에서 더하기 기호의 순번과 같다. 줄이 "− id" 형태이고 id가 1부터 m까지의 정수이면 번호가 id인 승객이 표를 반납한 것이다. 이때 그 승객에게 표가 있다고 보장된다.
출력
n개 줄을 출력한다. i번째 줄의 첫 번째 수 li는 i번째 객실에 팔린 표의 수이고, 그다음에 li개의 수가 이어지는데 이는 i번째 객실에 타게 될 승객의 번호를 오름차순으로 나열한 것이다. 답은 항상 존재한다고 보장된다.