라우터 2

입력 노드 N개와 출력 노드 N개를 가진 라우터 방향 그래프를 만든다. 경로가 유일해야 하고, 간선 수는 M_lim 이하, 노드 전력은 P_lim 이하이며, 간선 목록이 사전순으로 가장 작아야 한다.

어려움8그래프그리디구현조합론아직 제출이 없습니다시간 제한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이다.
  • XXZZ로 데이터를 보낼 수 있고 ZZ에서 YY로 가는 직접 연결이 있는 노드 ZZ가 있다.

XYX \neq Y이고 XXYY로 데이터를 보낼 수 있으면, XX에서 YY로 가는 데이터 경로는 A1=XA_1 = X, AL=YA_L = YL2L \ge 2에 대해 직접 연결의 집합 {(A1,A2),(A2,A3),,(AL1,AL)}\{(A_1, A_2), (A_2, A_3), \dots, (A_{L-1}, A_L)\}이다.

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

  • 모든 입력 노드가 모든 출력 노드로 데이터를 보낼 수 있다.
  • 입력 노드는 자기 자신에서만 데이터를 받는다.
  • 출력 노드는 자기 자신으로만 데이터를 보낸다.
  • XYX \neq Y이고 XXYY로 데이터를 보낼 수 있으면, YYXX로 데이터를 보낼 수 없다.
  • XYX \neq 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개, 출력 노드가 정확히 NN개다.
  • 직접 연결을 MlimM_{lim}개 이하로 쓴다.
  • 최대 전력이 PlimP_{lim} 이하다.
  • 전체 노드 수 Ntot=2N+KN_{tot} = 2N + K500000500\,000 이하다.

조건을 만족하는 라우터는 여럿이므로, 그중 출력 형식에서 정의한 사전순으로 가장 작은 하나만 정답으로 인정한다.

입력

첫째 줄에 정수 NN, MlimM_{lim}, PlimP_{lim}이 공백으로 구분되어 주어진다. NN은 입력 노드의 개수이자 출력 노드의 개수, MlimM_{lim}은 쓸 수 있는 직접 연결의 최대 개수, PlimP_{lim}은 라우터가 쓸 수 있는 최대 전력이다.

1N2501 \le N \le 250, 1Mlim10000001 \le M_{lim} \le 1\,000\,000, 1Plim10000001 \le P_{lim} \le 1\,000\,000이다. 입력은 항상 N2MlimN^2 \le M_{lim}NPlimN \le P_{lim}을 만족한다.

출력

첫째 줄에 전체 노드 수 Ntot=2N+KN_{tot} = 2N + K와 직접 연결의 개수 MM을 공백으로 구분해 출력한다. 이어지는 MM개의 줄에는 직접 연결을 한 줄에 하나씩 XX YY 형식으로 출력한다. 이는 노드 XX에서 노드 YY로 가는 직접 연결이 있다는 뜻이다. 직접 연결은 XX가 커지는 순서로, XX가 같으면 YY가 커지는 순서로 정렬해서 출력한다.

출력 전체를 정수 수열 Ntot,M,X1,Y1,,XM,YMN_{tot}, M, X_1, Y_1, \dots, X_M, Y_M으로 볼 때, 조건을 만족하는 모든 라우터의 출력 중 사전순으로 가장 작은 것을 출력한다.