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

def mq(nd):
    print("?",nd,flush=True)
    d=list(map(int,input().split()))
    for i in range(n):
        if d[i]==1:
            a=i+1
            b=nd
            if a>b:a,b=b,a
            vis.add((a,b))
    return d



n=int(input())
vis=set()
dis=mq(1)
c=[0,0]
for i in range(n):
    c[dis[i]%2]+=1
case=1
if c[0]<c[1]:case=0

for i in range(n):
    if dis[i]%2 ==case:
        mq(i+1)
print("!")
for a,b in vis:
    print(a,b,flush =True)
exit()



