라우터 4

N개의 입력, r개의 병합 노드, r개의 분할 노드, N개의 출력으로 이루어진 고정 라우터를 M = 2N + r^2개의 연결로 출력한다.

쉬움2구현시뮬레이션아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

헨리와 헤티는 네트워크 장비 회사에 막 입사했고, 첫 프로젝트로 새 라우터 Connect Ethernet Operating Interface 2016을 만든다. 라우터는 다음으로 이루어진다.

  • 입력 노드 NN개, 번호는 11번부터 NN번까지
  • 출력 노드 NN개, 번호는 N+1N+1번부터 2N2N번까지
  • 내부 노드 KK개, 번호는 2N+12N+1번부터 2N+K2N+K번까지
  • 서로 다른 두 노드를 잇는 단방향 직접 연결 MM

노드 XX가 노드 YY로 데이터를 보낼 수 있다는 말은(YYXX에서 데이터를 받을 수 있다는 말과 같다) X=YX = Y이거나, XX가 데이터를 보낼 수 있는 노드 ZZ가 존재하고 ZZ에서 YY로 가는 직접 연결이 있다는 뜻이다.

XXYY로 데이터를 보낼 수 있고 XYX \ne Y일 때, XX에서 YY로 가는 데이터 경로는 L2L \ge 2, 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)\}이다.

다음을 모두 만족하면 라우터가 제대로 동작한다.

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

라우터도 전기가 있어야 동작한다. 노드 XX를 켜는 데 드는 전력은 PX=INX×OUTXP_X = IN_X \times OUT_X이고, INXIN_XXX로 데이터를 보낼 수 있는 입력 노드의 개수, OUTXOUT_XXX에서 데이터를 받을 수 있는 출력 노드의 개수다. 라우터가 쓰는 최대 전력은 Pmax=max(P1,P2,,P2N+K)P_{max} = \max(P_1, P_2, \dots, P_{2N+K})다.

프로젝트 관리자는 명세 NN, MlimM_{lim}, PlimP_{lim}을 건네면서 입력 노드와 출력 노드가 정확히 NN개씩이고, 직접 연결을 많아야 MlimM_{lim}개 쓰고, PmaxP_{max}PlimP_{lim} 이하이며, 전체 노드가 500000500000개 이하(Ntot=2N+K500000N_{tot} = 2N + K \le 500000)인 라우터를 요구한다. 관리자가 실제로 건넨 명세는 N=5101N = 5101, Mlim=500000M_{lim} = 500000, Plim=500000P_{lim} = 500000이다.

명세 하나를 만족하는 라우터는 여러 가지다. 그래서 이 문제에서는 출력에 적힌 라우터 하나만 만든다.

입력

첫째 줄에 정수 NN, MlimM_{lim}, PlimP_{lim}이 주어진다. NN은 입력 노드의 개수이자 출력 노드의 개수, MlimM_{lim}은 쓸 수 있는 직접 연결의 최대 개수, PlimP_{lim}은 허용되는 최대 전력이다.

  • 1N1000001 \le N \le 100000
  • NPlim109N \le P_{lim} \le 10^9
  • 1Mlim5000001 \le M_{lim} \le 500000

출력에서 정의한 g=min(N,Plim/N)g = \min(N, \lfloor P_{lim} / N \rfloor)r=N/gr = \lceil N / g \rceil에 대해 2N+r2Mlim2N + r^2 \le M_{lim}2N+2r5000002N + 2r \le 500000이 항상 성립한다.

출력

아래에 적힌 라우터를 그대로 만든다. g=min(N,Plim/N)g = \min(N, \lfloor P_{lim} / N \rfloor), r=N/gr = \lceil N / g \rceil이라고 하자.

내부 노드는 K=2rK = 2r개이므로 Ntot=2N+2rN_{tot} = 2N + 2r이다. 2N+12N+1번부터 2N+r2N+r번까지는 모음 노드, 2N+r+12N+r+1번부터 2N+2r2N+2r번까지는 분배 노드다. 입력 노드 ii는 입력 그룹 i/g\lceil i / g \rceil에 속하고, 출력 노드 N+tN+t는 출력 그룹 t/g\lceil t / g \rceil에 속한다. 한 그룹의 크기는 많아야 gg다.

직접 연결은 M=2N+r2M = 2N + r^2개다.

  • 11부터 NN까지의 모든 ii에 대해, 입력 노드 ii에서 모음 노드 2N+i/g2N + \lceil i / g \rceil로 가는 연결
  • 11부터 rr까지의 모든 jj11부터 rr까지의 모든 kk에 대해, 모음 노드 2N+j2N + j에서 분배 노드 2N+r+k2N + r + k로 가는 연결
  • 11부터 NN까지의 모든 tt에 대해, 분배 노드 2N+r+t/g2N + r + \lceil t / g \rceil에서 출력 노드 N+tN + t로 가는 연결

첫째 줄에 NtotN_{tot}MM을 공백 하나로 구분해 출력한다. 다음 MM개의 줄에는 연결을 한 줄에 하나씩 출력하는데, 노드 XX에서 노드 YY로 가는 직접 연결이 있다는 뜻으로 정수 XXYY를 출력한다. 순서는 ii가 커지는 순의 입력 연결, 그다음 jj가 커지는 순이고 jj가 같으면 kk가 커지는 순의 내부 연결, 마지막으로 tt가 커지는 순의 출력 연결이다.