Statement
토카의 생일이 점점 다가온다. solved.ac의 유저라면 다들 알겠지만, 생일인 사람에게는 그 사람이 좋아하는 자료 구조를 선물해주는 전통이 있다.
토카의 2호 팬인 한별이는 다가오는 토카의 생일에는 토카가 좋아하는 트리를 선물하기로 했다. 이를 위해 한별이는 토카가 좋아하는 것을 조사했다.
한별이의 조사에 따르면 토카는 를 좋아한다. 특히 의 배수로만 이루어진 집합 를 좋아한다.
또한 토카는 다음 성질을 가지는 트리를 좋아한다. 트리의 정점을 개라고 하자.
- 정점에 부터 까지의 서로 다른 수가 모두 한 번 씩 등장하는 이진 트리이다.
- 의 배수가 적힌 정점은 자식을 가지지 않는다.
- 의 배수가 적히지 않은 정점은 자식을 개 가진다.
- 모든 정점에 대해 왼쪽 서브트리에 적힌 의 배수는 오른쪽 서브트리에 적힌 의 배수보다 작다.
- 트리를 이진 탐색 트리처럼 사용하였을 때 의 배수인 수 중에서 에 있는 수만 찾을 수 있어야 한다. 즉, 다음과 같이 정의된 함수 는 의 배수인 가 에 있다면
true, 그렇지 않다면false를 반환해야 한다.
function f(x):
return find(x, root)
function find(x, vertex):
if vertex is null:
return false
else:
if x == vertex.number:
return true
else if x < vertex.number:
return find(x, vertex.left_child)
else:
return find(x, vertex.right_child)
한별이는 토카가 좋아하는 트리를 만들어서 선물하기로 했으나 결국 트리를 만들지 못했다. 한별이를 위해 토카가 좋아하는 트리를 아무거나 하나 만들어주자.
Input
첫째 줄에 토카가 좋아하는 집합 의 크기 가 주어진다.
둘째 줄에 토카가 좋아하는 집합 의 원소 가 공백으로 구분되어 오름차순으로 주어진다. 는 의 배수
Output
만약 토카가 좋아하는 트리를 만들 수 없다면 첫째 줄에 -1를 출력한다.
만약 토카가 좋아하는 트리를 만들 수 있다면 첫째 줄에 을 출력하고 둘째 줄부터 개의 줄에 걸쳐 번째 줄에 번 정점의 왼쪽과 오른쪽 자식 정점의 번호를 공백으로 구분하여 순서대로 출력한다.
토카가 좋아하는 트리가 여러가지라면 그중 아무거나 하나를 출력한다.
Samples
예제 1
입력
4
0 8 10 12
출력
6
4 5
7 9
6 8
0 2
1 11
10 12
다음과 같은 트리를 만들 수 있다.
예제 2
입력
3
2 6 8
출력
-1
Notes
은 짝수이다.