#include using namespace std; #include using namespace atcoder; #ifdef DEFINED_ONLY_IN_LOCAL #include #define dump(...) cpp_dump(__VA_ARGS__) #else #undef dump #define dump(...) #endif templateinline bool chmax(T &a,T b){if(ainline bool chmin(T &a,T b){if(a>b){a=b;return true;}return false;} #define rep1(i,a) for(int i=0;i<(int)(a);i++) #define rep2(i,a,b) for(int i =(int)(a);i<(int)(b);i++) #define rep3(i,a,b,c) for(int i=(int)(a);i<(int)(b);i+=(int)(c)) #define overloadRep(a,b,c,d,e,...)e #define rep(...) overloadRep(__VA_ARGS__,rep3,rep2,rep1)(__VA_ARGS__) #define rrep(i,a,b) for(int i=(int)(a);i<=(int)(b);i++) #define drep(i,a,b) for(int i=(int)(a);i>=(int)(b);i--) #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(),a.rend() using P=pair; using T=tuple; const int inf=1e9; const long INF=1e18; const int dx[4]={0,1,0,-1}; const int dy[4]={1,0,-1,0}; bool bit(long x, int p){return (x>>p)&1;} bool out(int ni, int nj, int h, int w){return (ni<0 or ni>=h or nj<0 or nj>=w);} int pc(long x){return __builtin_popcountl(x);} using mint=modint998244353; int main(){ int n;cin>>n; auto get=[&](string t){ cout<<"? "<>res; return res; }; vectornow(26); rep(i,26){ string s(n,'a'+i); int x=get(s); now[i]=x; } string ans(n,'.'); rep(i,n){ string s(n,0+'a'); int mx=0,id=0; vectorused(26); rep(j,26)if(chmax(mx,now[j]))id=j; s[i]=char(id+'a'); used[id]=true; int pre=get(s); while(true){ int nmx=0,nid=0; rep(j,26)if(!used[j]){ if(chmax(nmx,now[j]))nid=j; } used[nid]=true; s[i]=char(nid+'a'); int nex=get(s); if(pre==nex){ pre=nex; id=nid; }else if(nex==pre-1){ ans[i]=char(id+'a'); now[id]--; break; }else{ ans[i]=char(nid+'a'); now[nid]--; break; } } } cout<<"! "<