#include #pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") using namespace std; #define rep(i,n) for (int i=0;i<(int)(n);i++) #define all(v) v.begin(),v.end() using ll=long long; using pll=pair; using tll=tuple; const ll INF=(1ll<<60); template void chmin(T &a,T b){ if(a>b){ a=b; } } template void chmax(T &a,T b){ if(a> v((1<<16)); int per[(1<<16)]; vector> ans; void dfs(int p){ cerr << p << endl; if(n<=p){ sort(all(ans)); rep(i,n){ cout << ans[i].second << " "; } cout << endl; exit(0); } for(auto &i:v[per[p]]){ bool ok=true; for(int j=i;j> c; k=c.size(); int x=0; while(x> vp(n); for(int i=1;i<=n;i++){ rep(j,k-s[i].size()+1){ if(s[i]==c.substr(j,s[i].size())) v[i].push_back(j); } vp[i-1]={v[i].size(),i}; } sort(all(vp)); rep(i,n) per[i]=vp[i].second; dfs(0); }