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

#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
long long t,n,m,k,ccnt,pos=0,sum=0,minn2=INT_MAX,sum2,cnt=0,cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0,cnt6=0,cnt7=0,a[2000005],x1,y7,x2,y2,x3,y3,aaa,bbb;
long long b[1000005],c[1000005],x,y,z,d=0,l2,r2;
//long long c3[2005][2005],c4[1000005],kk[1000005];
long long pos1=0,pos2=0,tem,tem2,l,r,ans=0,mod=998244353,tw[100005],th[100005],dd,ee,out[1000005][2],te[100005],vis[100005],ans1[100005],ans2[100005];
long long minn=LONG_LONG_MAX,maxx=-LONG_LONG_MAX,maxx2,posb;
ll c10,c11,c20,c21;
string s1,s2,s;
char ch;
vector<long long> v[1000005],num[1000005];
long long fpow(long long aa,long long bb)
{
    if(bb==0)
    {
        return 1;
    }
    else if(bb<0)
    {
        return 0;
    }
    long long kk1=aa;
    long long kk2=1;
    while(bb>1)
    {
        if(bb%2)
        {
            kk2*=kk1;
            kk2%=mod;
        }
        kk1*=kk1;
        kk1%=mod;
        bb=bb/2;
    }
    return (kk1*kk2)%mod;
}
long long co(long long x,long long y)
{
    long long ans=1;
    long long ans2=1;
    if(x==y||y==0)
    {
        return 1;
    }
    else
    {
        for(int i=x-y+1;i<=x;i++)
        {
            ans=ans*i;
            ans=ans%mod;
        }
        for(int i=1;i<=y;i++)
        {
            ans2=ans2*i;
            ans2=ans2%mod;
        }
        ans2=fpow(ans2,mod-2);
        ans2=(ans2*ans)%mod;
        return ans2;
    }
}
signed main()
{
    cin.tie(0);
    cout.tie(0);
    ios_base::sync_with_stdio(0);
    tw[0]=1;
    for(int i=1;i<=30;i++)
    {
        tw[i]=tw[i-1]*2;
    }
    mod=1e9+7;
    cin>>n;
    cout<<"? 1"<<endl;
    cnt=0;
    cnt2=0;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        if(a[i]%2==0)
        {
            b[cnt]=i;
            cnt++;
        }
        else
        {
            c[cnt2]=i;
            cnt2++;
        }
    }
    cnt3=0;
    if(cnt<=cnt2)
    {
        for(int i=1;i<=n;i++)
        {
            if(a[i]==1)
            {
                out[cnt3][0]=1;
                out[cnt3][1]=i;
                cnt3++;
            }
        }
        for(int i=1;i<cnt;i++)
        {
            cout<<"? "<<b[i]<<endl;
            for(int j=1;j<=n;j++)
            {
                cin>>x;
                if(x==1)
                {
                    out[cnt3][0]=b[i];
                    out[cnt3][1]=j;
                    cnt3++;
                }
            }
        }
    }
    else
    {
        for(int i=0;i<cnt2;i++)
        {
            cout<<"? "<<c[i]<<endl;
            for(int j=1;j<=n;j++)
            {
                cin>>x;
                if(x==1)
                {
                    out[cnt3][0]=c[i];
                    out[cnt3][1]=j;
                    cnt3++;
                }
            }
        }
    }
    cout<<"!"<<endl;
    for(int i=0;i<cnt3;i++)
    {
        cout<<out[i][0]<<" "<<out[i][1]<<endl;
    }
    return 0;



}
