버스 안의 레인저스

시간 제한2초메모리 제한512 MB

요약
승객의 승차 순서와 좌석 배정이 주어질 때 좌석 선택 규칙을 지키는 각 레인저가 될 수 있는 승객을 찾습니다.
난이도

어려움10점 중 8점

유형
시뮬레이션, 그리디, 정렬, 스택
정답자
아직 제출이 없습니다

문제

레인저스는 비밀 회의에 가려고 버스를 탄다.

주 악당은 레인저스가 타는 버스를 지켜본다. 버스에는 좌석이 n개 행으로 있고, 각 행에는 통로를 사이에 두고 왼쪽과 오른쪽에 좌석이 하나씩 있다. 행은 버스 앞에서부터 1번부터 n번까지 번호가 붙는다. 첫 정류장에서 버스에 탄 승객은 k명이고, 악당은 이들이 탄 순서와 누가 어느 좌석을 골랐는지 알고 있다. 처음에는 모든 좌석이 비어 있었다.

그는 레인저스가 버스에 탈 때 좌석을 고르는 방식을 알고 있다.

  • 레드 레인저는 앞좌석을 좋아한다. 버스에 타면 항상 번호가 가장 작은 행에서 빈 좌석을 고른다. 두 좌석이 모두 비어 있으면 왼쪽을 고른다.
  • 블루 레인저도 앞좌석을 좋아한다. 하지만 레드 레인저와 달리, 번호가 가장 작은 행에서 두 좌석이 모두 비어 있으면 오른쪽을 고른다.
  • 블랙 레인저는 뒷좌석을 좋아한다. 항상 번호가 가장 큰 행에서 빈 좌석을 고른다. 그 행의 두 좌석이 모두 비어 있으면 왼쪽을 고른다.
  • 옐로 레인저도 뒷좌석을 좋아하지만, 가능하면 오른쪽을 고른다.
  • 핑크 레인저는 선호가 없어서 아무 좌석이나 고른다.

악당은 k명의 승객 중 누가 각 레인저일 수 있는지 알고 싶어 한다. 일부 레인저는 다른 버스를 탔을 수도 있다.

입력

첫 번째 줄에는 두 정수 n과 k가 주어진다. n은 행의 수, k는 승객의 수이다. (1 ≤ n ≤ 10^9, 1 ≤ k ≤ min(2·10^5, 2n))

다음 k개 줄은 버스에 탄 순서대로 승객을 나타낸다.

i번째 줄에는 두 정수 x_i와 y_i가 주어진다. x_i는 i번째 승객이 고른 행, y_i는 그 행에서 고른 좌석이다. (1 ≤ x_i ≤ n, 1 ≤ y_i ≤ 2) y_i = 1이면 승객이 왼쪽 좌석을 골랐다는 뜻이고, y_i = 2이면 오른쪽 좌석을 골랐다는 뜻이다.

서로 다른 승객의 좌석은 겹치지 않는다.

출력

첫 번째 줄에는 레드 레인저일 수 있는 승객의 수 s_1과, 그 승객들의 번호를 버스에 탄 순서대로 공백으로 구분해 출력한다. 승객에게는 버스에 탄 순서대로 1번부터 k번까지 번호가 붙는다.

다음 네 줄에는 블루 레인저, 블랙 레인저, 옐로 레인저, 핑크 레인저에 대해 같은 정보를 차례대로 출력한다.

예제1

  1. 예제 1

    입력
    3 4
    1 1
    1 2
    3 2
    2 1
    
    예상 출력
    3 1 2 4
    1 2
    0
    1 3
    4 1 2 3 4