#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 300
#define maxe 1000008
int dis[N],a[N][N],vis[N];
char s[1000];
void fdd()
{
int i,j,temp,now;
for(i=0;i<='z';i++)
{dis[i]=maxe;
vis[i]=0;
}
dis['b']=0;
for(i=0;i<'z';i++)
{
temp=maxe;
now='b';
for(j=0;j<='z';j++)
if(!vis[j]&&dis[j]<temp)
{
now=j;
temp=dis[j];
}
if(temp==maxe)
break;
vis[now]=1;
for(j=0;j<='z';j++)
if(!vis[j]&&dis[j]>dis[now]+a[now][j])
dis[j]=dis[now]+a[now][j];
}
if(vis['m'])
printf("Yes.\n");
else
printf("No.\n");
}
int main()
{
while(scanf("%s",s)!=EOF)
{
if(s[0]=='0')
{
printf("No.\n");
continue;
}
memset(a,maxe,sizeof(a));
a[s[0]][s[strlen(s)-1]]=0;
while(scanf("%s",s)!=EOF)
{
if(s[0]=='0')
break;
a[s[0]][s[strlen(s)-1]]=0;
}
fdd();
}
return 0;
}
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1181