#include #include #include using namespace std; using namespace atcoder; using mint = modint998244353; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000001 #define Inf64 1000000000000000001 int N; bool is_good(int n){ if(n*2<=N)return false; for(int i=2;i*i<=n;i++){ if(n%i==0)return false; } return true; } int query(int i,int j){ cout<<"? "<>ret; return ret; } void answer(vector a,vector b){ cout<<"!"; rep(i,a.size()){ cout<<' '<>N; if(N==1){ answer({1},{1}); } vector a(N,-1),b(N,-1); { vector ret(N); rep(i,N){ ret[i] = query(0,i); } a[0] = *min_element(ret.begin(),ret.end()); bool f = is_good(a[0]); rep(i,N){ if(a[0]==ret[i])continue; if(f || is_good(ret[i]/a[0])){ b[i] = ret[i] / a[0]; } } if(f){ rep(i,N){ if(a[0]==ret[i]){ int r = query(1,i); if(r%a[0]==0){ b[i] = a[0]; for(int j=i+1;j0&&is_good(b[i])){ ii = i; break; } } for(int i=1;i