题目
记录详情
剩下点全WA了
#include<bits/stdc++.h>
# define reg register
# define N (1005)
using namespace std;
inline int read(){
reg char c=getchar();reg int sum=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c<='9'&&c>='0'){sum=(sum<<3)+(sum<<1)+(c^48);c=getchar();}
return sum*f;
}
struct node{
string s;
int st,ed;
bool operator<(const node &x)const{
return s<x.s;
}
}x;
int cnt_in,cnt_out,v[N];
int n,len[N],in[N],out[N],s=0x7fffffff;
vector<string>pth;
vector<node>g[N];
void print(){
int i,j;
for(i=0;i<26;++i){
if(g[i].empty())continue;
printf("%c:",i+'a');
for(j=0;j<g[i].size();++j){
cout<<(char)(g[i][j].st+'a')<<" "<<g[i][j].s
<<" "<<(char)(g[i][j].ed+'a')<<" ";
}
printf("\n");
}
}
void dfs(int p){
for(reg int i=v[p];i<g[p].size();i=v[p]){
v[p]=i+1;
pth.push_back(g[p][i].s);
dfs(g[p][i].ed);
}
}
int main(){
int i,j,k,u,v,flg=1;
n=read();
for(i=1;i<=n;++i){
cin>>x.s;
x.st=x.s[0]-'a';
s=min(x.st,s);
x.ed=x.s[x.s.size()-1]-'a';
g[x.st].push_back(x);
++in[x.ed];++out[x.st];
}
for(i=0;i<26;++i){
if(in[i]!=out[i])flg=0;
if(in[i]-out[i]==1)
++cnt_in;
if(out[i]-in[i]==1)
++cnt_out,s=i;
}
if(!flg&&!(cnt_in==cnt_out&&cnt_in==1)){
printf("***");
return 0;
}
for(i=0;i<26;++i)
sort(g[i].begin(),g[i].end());
dfs(s);
if(pth.size()!=n){
printf("***");
return 0;
}
for(i=0;i<pth.size()-1;++i)
cout<<pth[i]<<".";
if(pth.size()-1>=0)cout<<pth[pth.size()-1];
return 0;
}