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;
int n;
vector<pair<int,int>> input(){
    vector<pair<int,int>>arr(n);
    for(int i=0;i<n;i++){
        cin>>arr[i].first;
        arr[i].second=i+1;
    }
    return arr;
}
int main(){
        int odd=0,even=0;
    cin>>n;
    vector<pair<int,int>>pr;
    set<pair<int,int>>ans;
    cout<<"? 1"<<endl;
    pr=input();
    for(auto e: pr){
        if(e.first==1){
            ans.insert({1,e.second});
        }
        if(e.first&1){
            odd++;
        }
        else{
            if(e.first!=0){
                even++;
            }
        }
    }
    if(odd<=even){
        for(auto e: pr){
            if((e.first&1)){
                cout<<"? "<<e.second<<endl;
                vector<pair<int,int>>ppr;
                ppr=input();
                for(auto g: ppr){
                    if(g.first==1){
                        ans.insert({min(g.second,e.second),max(g.second,e.second)});
                    }
                }
            }
        }
    }
    else{
        // for(auto e: pr){
        //     if(!(e.first&1)){
        //         vector<pair<int,int>>ppr;
        //         cout<<"? "<<e.second<<endl;
        //         ppr=input();
        //         for(auto g : ppr){
        //             if(g.first==1){
        //                 ans.insert({min(e.second,g.second),max(e.second,g.second)});
        //             }
        //         }
        //     }
        // }
        for(auto e: pr){
            if(!(e.first&1) && e.first!=0){
                cout<<"? "<<e.second<<endl;
                vector<pair<int,int>>ppr;
                ppr=input();
                for(auto g: ppr){
                    if(g.first==1){
                        ans.insert({min(g.second,e.second),max(g.second,e.second)});
                    }
                }
            }
        }
    }
    cout<<"! "<<endl;
    for(auto e : ans){
        cout<<e.first<<" "<<e.second<<endl;
    }
}