#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+7;
struct {
int v;
int next;
}e[maxn];
int n;
int cnt=0;
int head[30];
int idegree[30];
int odegree[30];
int vis[30];
int vis1[30];
void add(int u,int v){
e[cnt].v=v;
e[cnt].next=head[u];
head[u]=cnt++;
}
void dfs(int k){
for(int i=head[k];i!=-1;i=e[i].next){
int v=e[i].v;
if(!vis[v]){
vis[v]=1;
dfs(v);
}
}
}
int main(){
cin>>n;
memset(head,-1,sizeof head);
char t;
for(int i=1;i<=n;i++){
string tp;
cin>>tp;
int l=tp.size()-1;
char b=tp[0];
char e=tp[l];
t=b;
add(b-'a',e-'a');
add(e-'a',b-'a');
vis1[b-'a']++;
vis1[e-'a']++;
odegree[b-'a']++;
idegree[e-'a']++;
}
dfs(t-'a');
bool flag=true;
int cnt=0;
int cnt1=0;
int cnt2=0;
for(int i=0;i<26;i++){
if(vis1[i]){
if(!vis[i]){
flag=false;
break;
}
if(idegree[i]!=odegree[i]){
if(idegree[i]-odegree[i]==1) cnt++;
else if(idegree[i]-odegree[i]==-1) cnt1++;
else cnt2++;
}
}
}
if(!flag) cout<<"impossible";
else{
if(cnt2) cout<<"impossible";
else {
if(cnt==0&&cnt1==0) cout<<"Euler loop";
else if(cnt==1&&cnt1==1) cout<<"Euler path";
else cout<<"impossible";}
}
}
计蒜客题目 单词拼接
最新推荐文章于 2022-11-19 21:34:12 发布