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())

print("?",1)
distance = list(map(int,input().split()))

group0 = []
group1 = []
ans = []

for i in range(n):
    if distance[i]%2==0: group0.append(i)
    else: group1.append(i)





if len(group0)<=len(group1):
    for i in range(n):
        if distance[i]==1:
            ans.append([i+1,1])

    for ele in group0[1:]:
        print("?",ele+1)
        e_distance = list(map(int,input().split()))
        for i in range(n):
            if e_distance[i]==1:  ans.append([ele+1,i+1])

                
    
else:

    for ele in group1:
        print("?",ele+1)
        e_distance = list(map(int,input().split()))
        for i in range(n):
            if e_distance[i]==1:  ans.append([ele+1,i+1])



for edge in ans:
    print(edge[0],edge[1])




    

        
            
            



 
