베라의 등산로 만들기

K를 주어진 탐욕적 분해 규칙에 따라 블록으로 나누고, 두 변소 경로가 정확히 K개인 연결된 트레일 네트워크를 출력한다.

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

문제

등산을 좋아하는 베라가 자기만의 등산로 망을 만들려고 한다. 이 망에는 11번부터 VV번까지 번호가 붙은 장소 VV개와 양방향 등산로 EE개가 있고, ii번 등산로는 서로 다른 두 장소 aia_ibib_i를 직접 잇는다. 망은 연결되어 있어야 하므로 어느 두 장소 사이든 등산로를 따라 오갈 수 있어야 한다. 같은 두 장소를 직접 잇는 등산로가 여러 개 있어도 된다.

a<ba < b인 두 장소 aabb는, 같은 등산로를 두 번 넘게 지나지 않으면서 aa에서 bb까지 갔다가 다시 aa로 돌아올 수 있으면 아름답게 연결된 쌍이 된다. 베라는 아름답게 연결된 쌍이 정확히 KK개인 망을 아름다운 망이라고 부른다.

망이 너무 커지면 안 되므로 1V,E50001 \le V, E \le 5000을 만족해야 한다.

거의 모든 KK에 대해 아름다운 망은 여러 가지가 있으므로, 이 문제는 그중 하나를 정해서 묻는다. 어떤 망을 출력해야 하는지는 출력 단락에 정확히 적혀 있다.

입력

첫째 줄에 정수 KK가 주어진다. (1K1071 \le K \le 10^7)

출력

아래 규칙대로 망을 만들어 출력한다. 다른 답은 인정하지 않는다.

먼저 KK를 블록으로 나눈다. 빈 목록에서 시작해 K>0K > 0인 동안 다음을 반복한다. m2m \ge 2이면서 m(m1)/2Km(m-1)/2 \le K인 가장 큰 정수 mm을 골라 목록 뒤에 붙이고, KKKm(m1)/2K - m(m-1)/2로 바꾼다. 이렇게 얻은 목록을 m1,m2,,mtm_1, m_2, \dots, m_t라 하고 V=m1+m2++mtV = m_1 + m_2 + \dots + m_t로 둔다.

장소에 11번부터 VV번까지 번호를 붙이고 각 블록에 연속한 번호 구간을 준다. 블록 1111번부터 m1m_1번까지, 블록 22는 그다음 m2m_2개를 차지하는 식이다. 블록 jj의 첫 장소를 sjs_j, 마지막 장소를 eje_j라고 하자.

출력의 첫째 줄에는 VVE=V+t1E = V + t - 1을 공백 하나로 구분해 출력한다. 이어지는 EE개의 줄에는 등산로 하나의 두 장소를 공백 하나로 구분해, 아래에 적힌 순서대로 출력한다.

j=1,2,,tj = 1, 2, \dots, t 순서로 블록 jj의 등산로를 출력한다.

  • mj=2m_j = 2이면 "sjs_j eje_j" 줄을 두 번 출력한다.
  • mj3m_j \ge 3이면 등산로 (sj,sj+1)(s_j, s_j + 1), (sj+1,sj+2)(s_j + 1, s_j + 2), ... , (ej1,ej)(e_j - 1, e_j)와 마지막으로 (ej,sj)(e_j, s_j)까지 mjm_j개를 한 줄에 하나씩, 각 줄에 앞쪽 장소를 먼저 적어 출력한다.

블록 tt개의 등산로를 모두 출력한 다음, 블록을 잇는 등산로 t1t - 1개를 출력한다. j=2,3,,tj = 2, 3, \dots, t 순서로 "ej1e_{j-1} sjs_j" 줄을 출력하면 된다.

이 망은 연결되어 있고, 아름답게 연결된 쌍이 정확히 KK개이며, 입력으로 가능한 모든 KK에 대해 V4587V \le 4587E4592E \le 4592를 만족한다.

힌트

첫 번째 예제는 K=2K = 2라서 블록이 m1=2m_1 = 2, m2=2m_2 = 2로 나뉜다. 장소 1122를 등산로 두 개가 잇고, 장소 3344를 등산로 두 개가 이으며, 장소 2233 사이의 등산로가 두 블록을 연결한다. 아름답게 연결된 쌍은 (1,2)(1, 2)(3,4)(3, 4) 두 개다.

두 번째 예제는 K=6K = 6이라서 블록이 m1=4m_1 = 4 하나뿐이고, 망은 장소 네 개로 이루어진 사이클이 된다. 장소 쌍 여섯 개가 모두 아름답게 연결된 쌍이다.