/*
* Author: Geeza
*/
#include <bits/stdc++.h>
#define ld long double
#define ll long long
#define pb push_back
#define fin(a, n) for(int i = a; i < n; i++)
#define fjn(a, n) for(int j = a; j < n; j++)
#define all(a) a.begin(),a.end()
#define allr(a) a.rbegin(),a.rend()
#define FAST ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
using namespace std;
const double PI = acos(-1);
const int N = 1e5 + 10, M = 1e3 + 10, LOG = 20;
const ll oo = 0x3f3f3f3f3f3f3f3f;
const int mod = 998244353, inf = 1e6;
const ld EPS = 1e-9;
string di[] = {"D", "L", "U", "R", "UL", "UR", "DL", "DR"};
int dx[] = {+1, +0, +0, -1, -1, -1, +1, +1};
int dy[] = {+0, -1, +1, +0, -1, +1, -1, +1};
char dc[] = {'D', 'L', 'R', 'U'};
int n;
vector<int> ans;
vector<vector<char>> chars;
char ask(int i, int j) {
if (chars[i][j] != '&') return chars[i][j];
cout << "? " << i << " " << j << endl;
cout.flush();
char c; cin >> c;
chars[i][j] = c;
return c;
}
void solve(vector<int> &nuts, vector<int> &bolts) {
if (nuts.empty()) return;
if (nuts.size() == 1) {
ans[nuts[0]] = bolts[0];
return;
}
int r = rand() % nuts.size();
swap(nuts[0], nuts[r]);
vector<int> big, small;
int same = -1;
for (int b : bolts) {
char c = ask(nuts[0], b);
if (c == '<') big.push_back(b);
else if (c == '>') small.push_back(b);
else same = b, ans[nuts[0]] = b;
}
vector<int> small2, big2;
for (int i = 0; i < nuts.size(); i++) {
char c = ask(nuts[i], same);
if (c == '=') continue;
if (c == '>') big2.push_back(nuts[i]);
else small2.push_back(nuts[i]);
}
solve(small2, small);
solve(big2, big);
}
void solve() {
cin >> n;
ans.assign(n+1, 0);
vector<int> nuts, bolts;
for (int i = 1; i <= n; i++) nuts.pb(i), bolts.pb(i);
chars = vector<vector<char>>(n+1, vector<char>(n+1, '&'));
solve(nuts, bolts);
cout << "! ";
for (int i = 1; i <= n; i++) cout << ans[i] << " ";
cout << endl;
}
int main() {
FAST;
// #ifndef ONLINE_JUDGE
// freopen("input.txt", "r",stdin);
// freopen("output.txt", "w",stdout);
// #endif
int tt = 1, c = 1; //cin >> tt;
while (tt--) {
// cout << "Case " << c++ << ":\n";
solve();
}
return 0;
}
LyoKKiBBdXRob3I6IEdlZXphCiovCgoKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgZmluKGEsIG4pIGZvcihpbnQgaSA9IGE7IGkgPCBuOyBpKyspCiNkZWZpbmUgZmpuKGEsIG4pIGZvcihpbnQgaiA9IGE7IGogPCBuOyBqKyspCiNkZWZpbmUgYWxsKGEpIGEuYmVnaW4oKSxhLmVuZCgpCiNkZWZpbmUgYWxscihhKSBhLnJiZWdpbigpLGEucmVuZCgpCiNkZWZpbmUgRkFTVCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKSwgY2luLnRpZShudWxscHRyKSwgY291dC50aWUobnVsbHB0cikKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBkb3VibGUgUEkgPSBhY29zKC0xKTsKY29uc3QgaW50IE4gPSAxZTUgKyAxMCwgTSA9IDFlMyArIDEwLCBMT0cgPSAyMDsKY29uc3QgbGwgb28gPSAweDNmM2YzZjNmM2YzZjNmM2Y7CmNvbnN0IGludCBtb2QgPSA5OTgyNDQzNTMsIGluZiA9IDFlNjsKY29uc3QgbGQgRVBTID0gMWUtOTsKCnN0cmluZyBkaVtdID0geyJEIiwgIkwiLCAiVSIsICJSIiwgIlVMIiwgIlVSIiwgIkRMIiwgIkRSIn07CmludCBkeFtdID0geysxLCArMCwgKzAsIC0xLCAtMSwgLTEsICsxLCArMX07CmludCBkeVtdID0geyswLCAtMSwgKzEsICswLCAtMSwgKzEsIC0xLCArMX07CmNoYXIgZGNbXSA9IHsnRCcsICdMJywgJ1InLCAnVSd9OwoKaW50IG47CnZlY3RvcjxpbnQ+IGFuczsKdmVjdG9yPHZlY3RvcjxjaGFyPj4gY2hhcnM7CgpjaGFyIGFzayhpbnQgaSwgaW50IGopIHsKICAgIGlmIChjaGFyc1tpXVtqXSAhPSAnJicpIHJldHVybiBjaGFyc1tpXVtqXTsKICAgIGNvdXQgPDwgIj8gIiA8PCBpIDw8ICIgIiA8PCBqIDw8IGVuZGw7CiAgICBjb3V0LmZsdXNoKCk7CiAgICBjaGFyIGM7IGNpbiA+PiBjOwogICAgY2hhcnNbaV1bal0gPSBjOwogICAgcmV0dXJuIGM7Cn0KCnZvaWQgc29sdmUodmVjdG9yPGludD4gJm51dHMsIHZlY3RvcjxpbnQ+ICZib2x0cykgewogICAgaWYgKG51dHMuZW1wdHkoKSkgcmV0dXJuOwogICAgaWYgKG51dHMuc2l6ZSgpID09IDEpIHsKICAgICAgICBhbnNbbnV0c1swXV0gPSBib2x0c1swXTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaW50IHIgPSByYW5kKCkgJSBudXRzLnNpemUoKTsKICAgIHN3YXAobnV0c1swXSwgbnV0c1tyXSk7CgogICAgdmVjdG9yPGludD4gYmlnLCBzbWFsbDsKICAgIGludCBzYW1lID0gLTE7CiAgICBmb3IgKGludCBiIDogYm9sdHMpIHsKICAgICAgICBjaGFyIGMgPSBhc2sobnV0c1swXSwgYik7CgogICAgICAgIGlmIChjID09ICc8JykgYmlnLnB1c2hfYmFjayhiKTsKICAgICAgICBlbHNlIGlmIChjID09ICc+Jykgc21hbGwucHVzaF9iYWNrKGIpOwogICAgICAgIGVsc2Ugc2FtZSA9IGIsIGFuc1tudXRzWzBdXSA9IGI7CiAgICB9CgogICAgdmVjdG9yPGludD4gc21hbGwyLCBiaWcyOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudXRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgY2hhciBjID0gYXNrKG51dHNbaV0sIHNhbWUpOwogICAgICAgIGlmIChjID09ICc9JykgY29udGludWU7CiAgICAgICAgaWYgKGMgPT0gJz4nKSBiaWcyLnB1c2hfYmFjayhudXRzW2ldKTsKICAgICAgICBlbHNlIHNtYWxsMi5wdXNoX2JhY2sobnV0c1tpXSk7CiAgICB9CiAgICBzb2x2ZShzbWFsbDIsIHNtYWxsKTsKICAgIHNvbHZlKGJpZzIsIGJpZyk7Cn0KCnZvaWQgc29sdmUoKSB7CiAgICBjaW4gPj4gbjsKICAgIGFucy5hc3NpZ24obisxLCAwKTsKICAgIHZlY3RvcjxpbnQ+IG51dHMsIGJvbHRzOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBudXRzLnBiKGkpLCBib2x0cy5wYihpKTsKICAgIGNoYXJzID0gdmVjdG9yPHZlY3RvcjxjaGFyPj4obisxLCB2ZWN0b3I8Y2hhcj4obisxLCAnJicpKTsKICAgIHNvbHZlKG51dHMsIGJvbHRzKTsKICAgIGNvdXQgPDwgIiEgIjsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY291dCA8PCBhbnNbaV0gPDwgIiAiOwogICAgY291dCA8PCBlbmRsOwp9CgppbnQgbWFpbigpIHsKICAgIEZBU1Q7Ci8vICNpZm5kZWYgT05MSU5FX0pVREdFCi8vICAgICBmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsc3RkaW4pOwovLyAgICAgZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3IixzdGRvdXQpOwovLyAjZW5kaWYKICAgIGludCB0dCA9IDEsIGMgPSAxOyAvL2NpbiA+PiB0dDsKICAgIHdoaWxlICh0dC0tKSB7CiAgICAgICAgLy8gY291dCA8PCAiQ2FzZSAiIDw8IGMrKyA8PCAiOlxuIjsKICAgICAgICBzb2x2ZSgpOwogICAgfQogICAgcmV0dXJuIDA7Cn0=