라우터 3

입력과 출력을 각각 g개의 그룹으로 나누고, 2Ng개의 방향 간선을 출력해 라우터를 구성하는 문제입니다.

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

문제

헨리와 헤티는 네트워크 장비 회사에 입사해 새 라우터를 설계한다. 라우터의 구성은 다음과 같다.

  • 입력 노드 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로 가는 직접 연결이 있다.

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 = 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} 이하이며, 전체 노드 수가 Ntot=2N+K500000N_{tot} = 2N + K \le 500\,000인 라우터를 만들어라.

조건을 만족하는 라우터는 여러 가지이므로, 출력 형식에서 정한 3층 구성 규칙으로 만든 라우터 하나만 정답으로 인정한다.

입력

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

1N1000001 \le N \le 100\,000, 1Mlim5000001 \le M_{lim} \le 500\,000, NPlim1010N \le P_{lim} \le 10^{10}이다.

N/g2Plim\lceil N/g \rceil^2 \le P_{lim}을 만족하는 가장 작은 양의 정수를 gg라고 할 때, 2NgMlim2Ng \le M_{lim}이고 2N+g25000002N + g^2 \le 500\,000임이 보장된다.

이 라우터의 설계 사양은 N=1250N = 1250, Mlim=500000M_{lim} = 500\,000, Plim=500000P_{lim} = 500\,000이고, 더 작은 사양도 입력으로 주어진다.

출력

라우터를 다음 규칙대로 만든다.

  1. N/g2Plim\lceil N/g \rceil^2 \le P_{lim}을 만족하는 가장 작은 양의 정수를 gg라고 하자.
  2. 1i,jN1 \le i, j \le N일 때 입력 노드 ii는 입력 그룹 ai=((i1)modg)+1a_i = ((i-1) \bmod g) + 1에 속하고, 출력 노드 N+jN+j는 출력 그룹 bj=((j1)modg)+1b_j = ((j-1) \bmod g) + 1에 속한다.
  3. 1a,bg1 \le a, b \le g인 순서쌍 (a,b)(a, b)마다 내부 노드를 하나씩 만들고 번호 2N+(a1)g+b2N + (a-1)g + b를 붙인다. 따라서 K=g2K = g^2이고 Ntot=2N+g2N_{tot} = 2N + g^2이다.
  4. 모든 입력 노드 ii에서 모든 bb에 대해 내부 노드 (ai,b)(a_i, b)로 직접 연결을 놓고, 모든 내부 노드 (a,b)(a, b)에서 그룹 bb에 속한 모든 출력 노드로 직접 연결을 놓는다. 따라서 M=2NgM = 2Ng이다.

첫째 줄에 NtotN_{tot}MM을 공백으로 구분해 출력한다. 이어지는 MM개의 줄에는 직접 연결을 한 줄에 하나씩, XX에서 YY로 가는 연결을 정수 XXYY로 출력한다. 연결을 출력하는 순서는 다음과 같다.

  • 먼저 입력 노드에서 나가는 연결을 ii가 증가하는 순서로 출력하고, ii가 같으면 bb가 증가하는 순서로 출력한다.
  • 그다음 내부 노드에서 나가는 연결을 내부 노드 번호가 증가하는 순서로 출력하고, 같은 내부 노드 안에서는 출력 노드 번호가 증가하는 순서로 출력한다.

이렇게 만든 라우터는 제대로 동작하고, 최대 전력은 max(N,N/g2)\max(N, \lceil N/g \rceil^2)이다.