2단 라우터

N과 연결 수 상한, 전력 상한이 주어질 때 수집기와 분배기를 두어 모든 조건을 만족하는 2단 라우터 그래프를 구성한다.

보통5그래프구현수학아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

라우터는 노드와, 서로 다른 두 노드를 잇는 단방향 연결로 이루어진다.

  • 입력 노드 NN개, 번호는 11부터 NN까지
  • 출력 노드 NN개, 번호는 N+1N+1부터 2N2N까지
  • 내부 노드 KK개, 번호는 2N+12N+1부터 2N+K2N+K까지
  • 단방향 연결 MM

노드 XX가 노드 YY로 데이터를 보낼 수 있다는 것은, X=YX = Y이거나, XX가 데이터를 보낼 수 있는 노드 ZZ가 있고 ZZ에서 YY로 가는 연결이 있다는 뜻이다. XYX \ne Y이고 XXYY로 데이터를 보낼 수 있을 때, XX에서 YY로 가는 데이터 경로는 A1=XA_1 = X, AL=YA_L = Y인 연결의 집합 {(A1,A2),(A2,A3),,(AL1,AL)}\{(A_1, A_2), (A_2, A_3), \dots, (A_{L-1}, A_L)\} (L2L \ge 2)이다.

라우터는 다음을 모두 만족할 때 제대로 동작한다.

  • 모든 입력 노드는 모든 출력 노드로 데이터를 보낼 수 있다.
  • 입력 노드는 자기 자신에게서만 데이터를 받는다.
  • 출력 노드는 자기 자신에게만 데이터를 보낸다.
  • XYX \ne Y이고 XXYY로 데이터를 보낼 수 있으면, YYXX로 데이터를 보낼 수 없다.
  • XYX \ne Y이고 XXYY로 데이터를 보낼 수 있으면, XX에서 YY로 가는 데이터 경로는 하나뿐이다. 특히 두 노드를 잇는 연결은 많아야 하나다.

노드 XX의 전력은 PX=INX×OUTXP_X = \mathrm{IN}_X \times \mathrm{OUT}_X로 정의한다. INX\mathrm{IN}_XXX로 데이터를 보낼 수 있는 입력 노드의 수, OUTX\mathrm{OUT}_XXX에게서 데이터를 받을 수 있는 출력 노드의 수다. 라우터의 최대 전력은 Pmax=max(P1,P2,,P2N+K)P_{max} = \max(P_1, P_2, \dots, P_{2N+K})이다.

NN, MlimM_{lim}, PlimP_{lim}이 주어진다. 출력 항목이 설명하는 방법으로 라우터를 만들어라. 이 라우터는 제대로 동작하고, 연결을 MlimM_{lim}개 이하로 쓰며, 최대 전력이 PlimP_{lim} 이하이고, 노드를 모두 합쳐 500000개 이하로 쓴다.

입력

첫째 줄에 정수 NN, MlimM_{lim}, PlimP_{lim}이 공백으로 구분되어 주어진다. (1N50001 \le N \le 5000, NPlim109N \le P_{lim} \le 10^9, 1Mlim5000001 \le M_{lim} \le 500000)

출력 항목의 라우터가 쓰는 연결의 수는 MlimM_{lim} 이하다.

출력

s=min(N,Plim/N)s = \min(N, \lfloor P_{lim} / N \rfloor), g=N/sg = \lceil N / s \rceil이라고 하자. 라우터는 다음과 같이 만든다.

  • 입력 노드를 번호 순으로 ss개씩 묶어 gg개의 그룹으로 나눈다. 입력 노드 ii는 그룹 i/s\lceil i / s \rceil에 속한다. 마지막 그룹은 ss개보다 적을 수 있다.
  • 출력 노드도 같은 방법으로 나눈다. 출력 노드 N+jN + j는 그룹 j/s\lceil j / s \rceil에 속한다.
  • 수집 노드를 gg개 둔다. 그룹 cc의 수집 노드는 2N+c2N + c번이다.
  • 분배 노드를 gg개 둔다. 그룹 dd의 분배 노드는 2N+g+d2N + g + d번이다.
  • 입력 노드마다 자기 그룹의 수집 노드로 가는 연결을 만든다.
  • 모든 수집 노드에서 모든 분배 노드로 가는 연결을 만든다.
  • 그룹마다 그 그룹의 분배 노드에서 그 그룹의 출력 노드로 가는 연결을 만든다.

첫째 줄에 노드의 총 개수 Ntot=2N+2gN_{tot} = 2N + 2g와 연결의 수 M=2N+g2M = 2N + g^2를 공백으로 구분해 출력한다. 다음 MM개의 줄에는 노드 XX에서 노드 YY로 가는 연결을 한 줄에 하나씩 두 정수 XX, YY로 출력한다. 연결은 XX가 증가하는 순서로, XX가 같으면 YY가 증가하는 순서로 출력한다.