```cpp
#include<bits/stdc++.h>
using namespace std;
map<string,int>mp;
map<int,string>mmp;
bool vis[105];
int n;
string a[105],b[105],ans[105];
bool check(){
for(int i=1;i<=8;i++){
if(a[i-1]!=b[i]&&a[i+1]!=b[i]){
return false;
}
}
return true;
}
void update(){
bool flag=0;
if(ans[1]==""){
for(int i=1;i<=8;i++){
ans[i]=a[i];
}
return;
}
for(int i=1;i<=8;i++){
if(mp[a[i]]>mp[ans[i]]){
flag=1;
break;
}
}
if(flag==1){
return;
}
for(int i=1;i<=8;i++){
ans[i]=a[i];
}
return;
}
void dfs(int k){
if(k==9){
if(check()==1){
update();
}
return;
}
for(int i=1;i<=n;i++){
if(vis[i]==0){
a[i]=mmp[i];
vis[i]=1;
dfs(k+1);
vis[i]=0;
}
}
return;
}
int main(){
cin>>n;
mp["Beatrice"]=1;
mp["Belinda"]=2;
mp["Bella"]=3;
mp["Bessie"]=4;
mp["Betsy"]=5;
mp["Blue"]=6;
mp["Buttercup"]=7;
mp["Sue"]=8;
mmp[1]="Beatrice";
mmp[2]="Belinda";
mmp[3]="Bella";
mmp[4]="Bessie";
mmp[5]="Betsy";
mmp[6]="Blue";
mmp[7]="Buttercup";
mmp[8]="Sue";
for(int i=1;i<=n;i++){
string s="",ls="";
int aa;
getline(cin,s);
bool flag=0;
for(int i=0;i<s.size();i++){
ls+=s[i];
if(flag==0){
for(int i=1;i<=8;i++){
if(ls==mmp[i]){
aa=i;
ls="";
flag=1;
}
}
}
else{
for(int i=1;i<=8;i++){
if(ls==mmp[i]){
b[aa]=mmp[i];
}
}
}
}
}
dfs(1);
for(int i=1;i<=8;i++){
cout<<ans[i]<<endl;
}
return 0;
}
```
by Forever1507 @ 2020-10-24 11:17:26