만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

버그가 있는 DFS

시간 제한1초메모리 제한2048 MB

요약
정수 K가 주어지면 BDFS()가 K를 반환하는 단순 무방향 그래프를 만들고, 그런 그래프가 없으면 -1 -1을 출력합니다.
난이도

보통10점 중 7점

유형
그래프, DFS, 비트 연산
정답자
아직 제출이 없습니다

문제

당신은 Depth First Search(DFS)라는 그래프 탐색 알고리즘을 공부하고 있다. 그런데 버그 때문에 이 알고리즘은 표준 DFS와 조금 다르게 동작한다. 노드가 NN개(11번부터 NN번까지 번호가 붙어 있음)인 그래프에서 버그가 있는 DFS(BDFS)의 동작은 다음과 같다.

BDFS():
  let S be an empty stack
  let FLAG be a boolean array of size N which are all false initially
  let counter be an integer initialized with 0

  push 1 to S

  while S is not empty:
    pop the top element of S into u
    FLAG[u] = true

    for each v neighbour of u in ascending order:
      counter = counter + 1
      if FLAG[v] is false:
        push v to S

  return counter

버그 때문에 이 알고리즘은 표준 DFS보다 느려지며, 이는 BDFS()의 반환값으로 확인할 수 있다. 이 동작을 살펴보기 위해, BDFS()가 KK를 반환하는 단순 무방향 그래프를 만들거나, 그런 그래프가 없음을 판단하려 한다.

입력

한 줄에 정수 KK(1≤K≤1091 \le K \le 10^9)가 주어진다.

출력

BDFS()가 KK를 반환하는 단순 무방향 그래프를 만들 수 없다면 한 줄에 -1 -1을 출력한다.

그렇지 않다면 다음 형식으로 그래프를 출력한다. 첫 줄에는 노드 수 NN과 무방향 간선 수 MM을 출력한다. 이어지는 MM개의 줄에는 노드 uu와 vv를 잇는 무방향 간선을 한 줄에 하나씩 출력한다. 간선의 순서는 자유롭다. 그래프는 다음 조건을 만족해야 한다.

  • 1≤N≤327681 \le N \le 32768
  • 1≤M≤655361 \le M \le 65536
  • 모든 간선에 대해 1≤u,v≤N1 \le u, v \le N
  • 단순 그래프이다. 즉 다중 간선과 자기 루프가 없다.

NN과 MM을 최소화할 필요는 없다. BDFS()가 KK를 반환하는 그래프가 존재한다면, 위 조건을 모두 만족하는 그래프가 존재함이 증명되어 있다. 해가 여러 개라면 그중 아무것이나 출력하면 된다.

예제3

  1. 예제 1

    입력
    8
    
    예상 출력
    3 3
    1 2
    1 3
    2 3
    
  2. 예제 2

    입력
    1
    
    예상 출력
    -1 -1
    
  3. 예제 3

    입력
    23
    
    예상 출력
    5 7
    4 5
    2 3
    3 1
    2 4
    4 3
    2 1
    1 5