#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
struct node{
int x,id;
};
multiset<node>q[N];
bool operator<(const node &a,const node &b){
if(a.x==b.x)return a.id<b.id;
return a.x<b.x;
}
bool v[N];
int ans[N],top;
void dfs(int x){
// cout<<(char)(x+'A')<<":"<<q[x].size()<<endl;
while(q[x].size()){
if(v[(*q[x].begin()).id]){
q[x].erase(q[x].begin());
continue;
}
int poi=(*q[x].begin()).x;
v[(*q[x].begin()).id]=1;
q[x].erase(q[x].begin());
dfs(poi);
}
ans[++top]=x;
}
vector<int>dat;
int main(){
freopen("out.out","w",stdout);
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
char a[2];
scanf("%s",a);
node x;
x.id=i;
dat.push_back(a[0]-'A');
dat.push_back(a[1]-'A');
x.x=a[0]-'A';
q[a[1]-'A'].insert(x);
x.x=a[1]-'A';
q[a[0]-'A'].insert(x);
}
sort(dat.begin(),dat.end());
int l=unique(dat.begin(),dat.end())-dat.begin();
int tmp=0,poix=dat[0];
for(int i=l-1;i>=0;i--){
if(q[dat[i]].size()%2){
if(tmp<2){
tmp++;
poix=dat[i];
}
else {
printf("No Solution\n");
return 0;
}
}
}
dfs(poix);
for(int i=top;i>=1;i--){
printf("%c",(char)(ans[i]+'A'));
}
return 0;
}
输入:
100
ix
lH
ma
JZ
oA
oo
uI
Oj
nV
re
WA
cN
JS
bg
yk
DU
rV
cl
Ab
dA
Wp
wJ
Fk
uP
Gr
CP
xg
sn
JR
vg
RD
ev
ah
HW
lN
JO
Zg
Ah
FA
tp
Wz
bf
Si
ag
Ai
yo
Th
Hi
mt
vz
ko
Jx
Ch
MX
ke
Sx
Sw
zX
xy
sV
jg
Ik
fx
ad
wl
mw
YV
At
jG
He
Ma
em
sk
OK
sl
Mm
sA
sw
oj
YM
AY
Pv
xI
zt
wx
fi
ze
tI
Oi
mb
kK
fY
xt
Ta
xU
ay
ak
rI
QI
Pl
本机输出:
QIkFAWHekKOJRDUxIrGjOiAYMXzWptAbfYVnsAdaMmaThAojgZJSiHlNclPChagbmerVskaykooyxJwSxfixgvPuItmwlswxtzevz
在线IDE输出:
ix