//EGOI 2022 Toy Design
//https://qoj.ac/contest/2260/problem/5184
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;
ll Connected(ll a,ll v,ll u){
cout << "? " << a << " " << v << " " << u << endl;
ll res; cin >> res; return res;
}
void DescribeDesign(vector<pair<int,int>> ans){
cout << "! " << ans.size() << endl;
for(auto [a,b]:ans) cout << a << " " << b << endl;
}
int main(){
ll n, max_ops;
cin >> n;
ll m=0; vll A; vector<vll> comp; vector<bool> vis(n+1,false);
vector<pair<int,int>> ans; A.push_back(1); comp.push_back({});
for(int i=2; i<=n; i++) if(Connected(m,1,i)!=m){
m++; vis[i]=true; A.push_back(i); comp.push_back({});
}
for(int i=2; i<=n; i++) if(!vis[i]){
ll l=0, r=m;
while(l<r){
ll mid=(l+r)/2;
if(Connected(mid,1,i)==mid) r=mid;
else l=mid+1;
}
comp[l].push_back(i);
}
for(int i=0; i<=m; i++) for(auto v:comp[i]) ans.push_back({A[i],v});
DescribeDesign(ans); return 0;
}