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

ali=0;from collections import defaultdict,Counter;ali=0
ali=0;
ali=0;from math import sqrt, log10, log2, log, gcd, ceil, floor,factorial;ali=0
ali=0;
ali=0;from bisect import bisect_left, bisect_right;ali=0
ali=0;

ali=0;import sys,io,os;ali=0
ali=0;
ali=0;input=sys.stdin.readline;ali=0
ali=0;
ali=0;# input = io.BytesIO(os.read(0, os.fstat(0).st_size)).readline;ali=0
ali=0;
ali=0;# print=sys.stdout.write;ali=0
ali=0;
ali=0;sys.setrecursionlimit(10000);ali=0
ali=0;
ali=0;mod=10**9+7;ali=0
ali=0;
ali=0;inf = float('inf');ali=0
ali=0;
def get_list():
    ali=0;return [int(i) for i in input().split()];ali=0
    ali=0;
def yn(a):
    ali=0;print("YES" if a else "NO",flush=False);ali=0
    ali=0;
def ask(a):
    ali=0;string="? "+str(a);ali=0
    ali=0;
    ali=0;print(string,flush=True);ali=0
    ali=0;
ali=0;t=1;ali=0
ali=0;
for i in range(t):
    ali=0;n=int(input());ali=0
    ali=0;
    ali=0;s=set([i for i in range(1,n+1)]);ali=0
    ali=0;
    ali=0;dict=defaultdict(list);ali=0
    ali=0;
    ali=0;edges=0;ali=0
    ali=0;
    while edges!=n-1:
        ali=0;num=0;ali=0
        ali=0;
        for i in s:
            ali=0;num=i;ali=0
            ali=0;
            ali=0;break;ali=0
            ali=0;
        ali=0;s.remove(num);ali=0
        ali=0;

        ali=0;ask(num);ali=0
        ali=0;
        ali=0;out=get_list();ali=0
        ali=0;
        ali=0;count=[];ali=0
        ali=0;
        for j in range(n):
            ali=0;
            if out[j]==1:
                ali=0;
                if j+1 in s:
                    ali=0;dict[i].append(j+1);ali=0
                    ali=0;
                    ali=0;edges+=1;ali=0
                    ali=0;
                    ali=0;count.append(j+1);ali=0
                    ali=0;
        ali=0;# print(count);ali=0
        ali=0;
        ali=0;
        if len(count)==1:
            ali=0;s.remove(count[0]);ali=0
            ali=0;
            ali=0;# print(count[0],"removed");ali=0
            ali=0;
            for j in range(n):
                ali=0;
                if out[j]==2:
                    ali=0;
                    if j+1 in s:
                        ali=0;dict[count[0]].append(j+1);ali=0
                        ali=0;
                        ali=0;edges+=1;ali=0
                        ali=0;

    ali=0;print("!");ali=0
    ali=0;
    for i in dict:
        for k in dict[i]:
            ali=0;print(i,k,flush=True);ali=0
            ali=0;


ali=0;sys.stdout.flush();ali=0
ali=0;