^的运算优先级小于+ !!!
#include <bits/stdc++.h>
using namespace std;
//#define endl "\n"
#define debug cout<<"debug"<<endl
mt19937 rd(time(0));
typedef long long ll;
typedef long double ld;
typedef pair<int, int> PII;
const double eps = 1e-8;
const double PI = 3.14159265358979323;
const int N = 1e5+10, M = 2*N, mod = 1e9+7;
const int INF = 0x3f3f3f3f;
int n;
int x[N], a[N];
int ask(int op, int i, int j)
{
if(op == 1) cout<<"AND "<<i<<" "<<j<<endl;
else if(op == 2) cout<<"OR "<<i<<" "<<j<<endl;
else cout<<"XOR "<<i<<" "<<j<<endl;
int t; cin>>t;
return t;
}
// 0 1 2 3
void solve()
{
cin>>n;
map<int, int> mp;
int f = 0, b = 0;
for(int i = 2; i<=n; i++)
{
x[i] = ask(3, 1, i);
if(x[i] == 0 && !f)
{
a[1] = ask(1, 1, i);
f = 1;
}
if(!mp[x[i]]) mp[x[i]] = i;
else if(!f){
a[i] = a[mp[x[i]]] = ask(1, i, mp[x[i]]);
a[1] = x[i]^a[i];
f = 1;
}
if(x[i] == n-1 && !b) b = i;
}
if(!f)
{
// 由公式可以算出a+b, b+c, c+a 得到a+b+c最后减b+c即得a
// a + b = a^b + 2*(a&b),
// b + c = b^c + 2*(b&c),
// a + c = a^c + 2*(a&c),
// a ^ b = n-1, 则a&b = 0
// 只需再求b&c 和 a&c
int c = 0;
for(int i = 2; i<=n; i++)
{
if(i != b)
{
c = i;
break;
}
}
int ab = x[b] + 2*0; // ask(1, 1, b)
int bc = (x[b]^x[c]) + 2*ask(1, b, c); // 注意: x[b]^x[c] + 2*ask(1, b, c) 是错误的, ^的运算优先级低于+
int ac = x[c] + 2*ask(1, 1, c);
a[1] = (ab+bc+ac)/2 - bc;
}
cout<<"! "<<a[1]<<" ";
for(int i = 2; i<=n; i++) a[i] = x[i]^a[1], cout<<a[i]<<" ";
cout<<endl;
}
int main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int T;
T = 1;
// cin>>T;
while(T -- )
{
solve();
}
return 0;
}