좌석 배정

아직 제출이 없습니다시간 제한0.8초메모리 제한32 MB

문제

다음 주에 큰 경기가 열린다. 경기장에는 좌석이 NN개 있고, 좌석마다 11번부터 NN번까지 번호가 붙어 있다. 팬은 표를 한 장 신청하면서 앉아도 괜찮은 좌석 범위를 함께 적는다. 범위는 두 정수 FFLL로 주어지고, 이 팬은 FSLF \le S \le L인 좌석 SS라면 어느 좌석이든 받아들인다.

매표소에 신청 MM개가 들어왔다. 두 팬이 같은 좌석을 받을 수는 없다. 동시에 만족시킬 수 있는 신청의 최대 개수를 구하고, 그 개수만큼 좌석을 배정하는 프로그램을 작성하라.

입력

첫 줄에 좌석 수 NN (1N1000001 \le N \le 100000)과 신청 수 MM (1M10000001 \le M \le 1000000)이 공백으로 구분되어 주어진다.

다음 MM개의 줄에는 신청이 하나씩, 두 정수 FFLL (1FLN1 \le F \le L \le N)로 주어진다. 신청은 입력에 나오는 순서대로 11번부터 MM번까지 번호를 매긴다.

출력

첫 줄에 선택한 신청의 최대 개수 KK를 출력한다.

이어지는 KK개의 줄에는 좌석 배정을 좌석 번호가 증가하는 순서로 하나씩 출력한다. 각 줄에는 좌석 번호 SS와 그 좌석을 받은 신청 번호 RR을 공백으로 구분해 출력한다.

최대 개수를 만드는 배정은 여러 가지가 있으므로, 다음 규칙으로 정해지는 배정 하나만 정답으로 인정한다. 좌석을 11번부터 NN번까지 차례로 본다. 지금 보고 있는 좌석 SS에 대해, 아직 좌석을 받지 않았고 FSLF \le S \le L을 만족하는 신청을 모은다. 그런 신청이 하나라도 있으면 그중 LL이 가장 작은 신청에 좌석 SS를 준다. LL이 같은 신청이 둘 이상이면 번호가 가장 작은 신청에 준다. 그런 신청이 없으면 좌석 SS는 비워 둔다.

이 규칙은 만족시킬 수 있는 신청 개수를 항상 최대로 만든다.