//####################
//Tower
//####################
#include<bits/stdc++.h>
#define pb push_back
#define eb emplace_back
#define rall(x) x.rbegin(), x.rend()
#define all(x) x.begin(), x.end()
using namespace std;
vector<pair<int,int>> query(int x, int y , int z){
cout.flush();
cout <<"? "<<x<<' '<<y<<' ' <<z<<endl;
int r;cin>>r;
vector<pair<int,int>> re;
for(int i = 0 ; i < r ; i++){
int a,b;cin>>a>>b;
re.emplace_back(a,b);
}
cout.flush();
return re;
}
void answer(vector<int> ans){
cout.flush();
cout <<"! ";
for(int u:ans)cout <<u<<" ";
cout << endl;
cout.flush();
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n;cin>>n;
if(n==3){
answer({0,1,2});
}else{
pair<int,int> farr = {0,1};
for(int i = 2; i < n ; i++){
farr = query(farr.first, farr.second,i)[0];
}
vector<int> ans = {farr.first, farr.second};
set<int> S;
S.insert(ans[0]);
S.insert(ans[1]);
for(int t = 2 ; t < n ; t++){
for(int x = 0 ; x < n ; x++){
if(S.count(x)==0){
if(query(ans[ans.size()-1], ans[ans.size()-2],x).size()==2){
S.insert(x);
ans.emplace_back(x);
break;
}
}
}
}
answer(ans);
}
return 0;
};