5
5 3
2 4
3 1
4 5
 4
2 4
3 2
2 1
 5
5 3
2 4
3 1
4 5
 2
1 2
 4
3 4
2 3
3 1
 10
8 10
2 9
7 8
4 1
7 3
4 7
2 5
2 4
4 6
 5
3 4
3 2
3 1
1 5
 3
1 2
2 3
 5
1 2
1 3
1 4
1 5

1 2
2 3
2 4
 1 3
2 4
3 5
4 5
 1 2
 1 3
2 3
3 4
 1 4
2 4
2 5
2 9
3 7
4 6
4 7
7 8
8 10
 1 3
1 5
2 3
3 4
 1 2
2 3
 1 2
1 3
1 4
1 5

from collections import deque

n = int(input())
seen = [False]*n
seen[0] = True
ask = deque([0])
res = []
cnt = n - 1
while ask and cnt:
    u = ask.popleft()
    print('?', u+1, flush=True)
    arr = list(map(int, input().split()))
    for v,d in enumerate(arr):
        if d==1:
            seen[v] = True
            res.append([u,v])
            cnt -= 1
        elif d==2 and not seen[v]:
            seen[v] = True
            ask.append(v)
print('!')
for u, v in res:
    print(u+1, v+1)
