만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

키노마니

면접 대비

시간 제한4초메모리 제한1024 MB

요약
N개의 상영 시간 구간이 주어질 때, 겹치지 않게 영화를 나눠 보는 최소 인원을 구하고 각 사람이 볼 영화 번호를 출력합니다.
난이도

보통10점 중 4점

유형
그리디, 구간, 정렬, 힙
정답자
아직 제출이 없습니다

문제

바이테크는 친구들과 함께 영화 동호회를 만들었다. 회원들은 극장에서 여러 영화를 보고, 모여서 본 영화를 서로에게 이야기한다. 이야기가 매우 자세해서 들은 영화는 실제로 본 것과 거의 같다.

곧 '은빛 지평선' 영화제가 열린다. 회원들을 영화제에 보내 영화를 모두 나눠 보게 해야 한다. 영화제에서 각 영화는 한 번만, 정해진 시간 구간에 상영된다. 영화를 봤다고 인정받으려면 처음부터 끝까지 전부 봐야 한다. 회원은 한 순간에 영화 한 편만 볼 수 있지만, 한 영화가 끝나는 순간 다른 영화를 시작할 수 있다. 티켓이 비싸서 동호회는 가능한 한 적은 수의 회원만 보내려고 한다.

영화 수와 각 영화의 상영 시간 구간을 입력받아, 영화제에 보내야 할 회원의 최소 인원을 구하고 그 결과를 표준 출력에 출력하는 프로그램을 작성하라.

입력

첫 줄에는 영화제에서 상영되는 영화 수 NN이 자연수로 주어진다 (1≤N≤2500001 \le N \le 250000). 이어지는 NN줄에는 영화마다 한 줄씩 정보가 주어진다. 각 줄에는 자연수 SiS_i, TiT_i (1≤Si<Ti≤1091 \le S_i < T_i \le 10^9)가 한 칸 띄어 적혀 있다. ii번째 영화는 영화제의 SiS_i분부터 TiT_i분까지 상영된다.

출력

첫 줄에는 모든 영화를 보기 위해 필요한 최소 회원 수 RR을 출력한다. 이어서 RR줄에 걸쳐 회원이 영화를 보는 방법을 하나씩 출력한다. i+1i+1번째 줄에는 ii번째 회원이 볼 영화 수 FiF_i를 쓰고, 한 칸 띄운 뒤 그 회원이 보는 영화 번호 Mi,1M_{i,1}부터 Mi,FiM_{i,F_i}까지를 한 칸씩 띄워 쓴다. 답이 여러 가지라면 그중 아무 방법이나 출력하면 된다.

예제2

  1. 예제 1

    입력
    5
    1 5
    4 7
    1 3
    10 20
    12 15
    
    예상 출력
    2
    2 1 5
    3 3 2 4
    
  2. 예제 2

    입력
    5
    1 2
    5 6
    4 5
    2 3
    1 5
    
    예상 출력
    2
    4 1 4 3 2
    1 5