#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define int long long #define mp make_pair #define pii pair #define fi first #define se second #define pb push_back const int MOD = 998244353;// const int FACTMAX = 2000005;// const int CATALANMAX = 1000005;// int fact[FACTMAX], invfact[FACTMAX], cat[CATALANMAX]; int expo(int a, int b){ int res=1; a%=MOD; while (b){ if (b&1)res=(res*a)%MOD; a=(a*a)%MOD; b>>=1; } return res; } int inv(int num){ return expo(num, MOD-2); } void initfact(){ fact[0]=1; for (int i=1; i=0; --i)invfact[i]=(invfact[i+1]*(i+1))%MOD; } int ncr(int n, int r){ if (n>x; if (x==-1)exit(0); return x; } int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); initfact(); int t=1; //cin>>t; while (t--){ int n, r=-1, a=-1, b=-1; cin>>n; vector p(n-1), pos; for (int i=0; i=2)a=pos[0], b=pos[1], r=query(a, b); vector ans; for (int i=1; i<=9; ++i){ vector d(n); d[n-1]=i; bool can=1; for (int j=0; j9)can=0; } } if (can&&r!=-1&&d[a]*d[b]!=r)can=0; if (!can)continue; string s=""; for (int j=n-1; j>=0; --j)s+='0'+d[j]; ans.pb(s); } if (ans.size()==1)cout<<"! "<