#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
const int N = 205 ;
const int Q = 20005 ;
int n , arr[N] ;
vector<pair<int,int>> edges ;
vector<int> v ;
int Connected(int a , int i , int j){
cout << "? " << a << ' ' << i << ' ' << j << endl ;
int k ; cin >> k ; return k ;
}
void DescribeDesign(vector<pair<int,int>> result){
cout << "! " << (int)result.size() << endl ;
for(auto it:result) cout << it.F << ' ' << it.S << endl ;
}
void ToyDesign(int n, int max_ops)
{
vector<pair<int,int>> result;
for(int i=1;i<n;i++)
{
for(int j=i+1;j<=n;j++)
{
int x=Connected(0, i, j);
if(x==0)
{
result.push_back({i, j});
}
}
}
DescribeDesign(result);
}
int main(){
cin >> n ;
ToyDesign(n,n) ;
return 0 ;
}