题目:无序字母对
思路:建图跑欧拉回路……
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 26*26
int n;
int a[maxn+5][maxn+5];
void read(int& x) {
char y;
while(~scanf("%c",&y)&&!isalpha(y));
if(y>='A'&&y<='Z') x=y-'A'+1;
else x=y-'a'+27;
}
void readin() {
scanf("%d",&n);
for(int i=1;i<=n;i++) {
int x,y;
read(x),read(y);
if(a[x][y]) continue;
a[x][y]=a[y][x]=true;
a[x][0]++,a[y][0]++;
}
}
char getalpha(int x) {
if(x<=26) return x-1+'A';
else return x-27+'a';
}
vector<int> ans;
void print() {
for(int i=ans.size()-1;i>=0;i--) {
int y=ans[i];
printf("%c",getalpha(y));
}
}
void dfs(int x) {
for(int y=1;y<=52;y++) {
if(a[x][y]) {
a[x][y]=a[y][x]=0;
dfs(y);
}
}
ans.push_back(x);
}
int judge() {
int s=0;
for(int i=1;i<=52;i++) {
if(a[i][0]&1) {
s++;
}
}
if(s==1||s>2) return -1;
if(s==0) return 0;
return 1;
}
int main() {
readin();
int s=judge();
if(s==-1) {printf("No Solution");return 0;}
else if(s==0) {
for(int i=1;i<=52;i++) {
if(a[i][0]) {
dfs(i);
print();
return 0;
}
}
} else {
for(int i=1;i<=52;i++) {
if(a[i][0]&1) {
dfs(i);
print();
return 0;
}
}
}
return 0;
}