#include <cstring> #include <iostream> #include <cstdio> #include <algorithm> #include <vector> using namespace std; int n,ans[100010],cnt,in[60]; vector<int> G[60]; bool vis[60],answer,dis[60][60],oula; char word[]={‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘,‘H‘,‘I‘,‘J‘,‘K‘,‘L‘,‘M‘,‘N‘,‘O‘,‘P‘,‘Q‘,‘R‘,‘S‘,‘T‘,‘U‘,‘V‘,‘W‘,‘X‘,‘Y‘,‘Z‘, ‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘,‘h‘,‘i‘,‘j‘,‘k‘,‘l‘,‘m‘,‘n‘,‘o‘,‘p‘,‘q‘,‘r‘,‘s‘,‘t‘,‘u‘,‘v‘,‘w‘,‘x‘,‘y‘,‘z‘}; char getc(){ char c; c=getchar(); while(1){ if(‘a‘<=c && c<=‘z‘ || (‘A‘<=c && c<=‘Z‘))return c; c=getchar(); } } void make(){ for(int i=1;i<=n;i++){ char u,v; int u1,v1; u=getc(); v=getc(); if(‘A‘<=u && u<=‘Z‘)u1=u-‘A‘; else u1=u-‘a‘+26; if(‘A‘<=v && v<=‘Z‘)v1=v-‘A‘; else v1=v-‘a‘+26; in[u1]++; in[v1]++; vis[u1]=vis[v1]=1; G[u1].push_back(v1); G[v1].push_back(u1); } } bool check(){ int sum=0; for(int i=0;i<52;i++)if(in[i]%2==1)sum++; if(sum!=2 && sum)return false; return true; } void dfs(int u){ ans[++cnt]=u; for(int i=0;i<G[u].size();i++){ int v=G[u][i]; if(cnt==n+1)return; if(!dis[u][v]){ dis[u][v]=1; dis[v][u]=1; dfs(v); dis[u][v]=0; dis[v][u]=1; } } if(cnt!=n+1)cnt--; } int main(){ scanf("%d",&n); make(); if(!check()){puts("No Solution"); return 0;} for(int i=0;i<52;i++)sort(G[i].begin(),G[i].end()); int start=0; for(int i=0;i<52;i++) if(vis[i]){start=i; break;} for(int i=0;i<52;i++) if(in[i]%2==1){start=i; break;} dfs(start); for(int i=1;i<=cnt;i++)putchar(word[ans[i]]); puts(""); return 0; }
时间: 2024-10-13 01:46:30