???CF886D???Restoration of string
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????S?????????????????????S?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
|S|<=100000
??????????????????????????????????????????????????????????????????
????????????S??????????????????????????????ab???????????????a?????????????????????b????????????????????????a???b??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
#include <cstdio> #include <cstring> #include <iostream> using namespace std; int n,m,flag; char s[100010]; int to[30],vis[30],from[30],used[30]; int main() { memset(to,-1,sizeof(to)),memset(from,-1,sizeof(from)); scanf("%d",&n); int i,j,a,b,l; for(i=1;i<=n;i++) { scanf("%s",s),l=strlen(s),s[l]=???a???-1; for(j=1;j<l;j++) { a=s[j-1]-???a???,b=s[j]-???a???; if((to[a]!=-1&&to[a]!=b)||(from[b]!=-1&&from[b]!=a)) { puts("NO"); return 0; } to[a]=b,from[b]=a,vis[b]=1; } vis[s[0]-???a???]=1; } for(i=0;i<26;i++) if(vis[i]&&from[i]==-1) for(j=i;j!=-1;j=to[j]) s[m++]=j+???a???,used[j]=1; for(i=0;i<26;i++) if(vis[i]&&!used[i]) { puts("NO"); return 0; } s[m]=???\0???,printf("%s",s); return 0; }//4 mail ai lru cf