#include <stdio.h>
#include <string.h>
char start[1024];//字母开头储存
char end[1024];//字母结尾储存
int flag[1024];//标记
int n;
int visit;
void DFS(char x)
{
if(x=='m')//如果x的值是m表明咒语符合要求。标记为一。
{
visit=1;
return ;
}
for(int i=0;i<n;i++)//n个单词循环
{
if(visit)//符合跳出
break;
if(!flag[i]&&start[i]==x)//如果单词没有调用过且开头字母符合x,则往下DFS
{
flag[i]=1;//标记这个单词为一
DFS(end[i]);//用这个单词的结尾继续DFS
flag[i]=0;//DFS失败,重新标为零
}
}
}
int main(int argc, char *argv[])
{
char c;
while((c=getchar())!=EOF)//读入n个单词
{
n=0;
int mmp=0;
for(;;)//将每个字母进行循环取开头字母和结尾字母
{
start[n]=end[n]=c;//将字母的开头存入数组
if(start[n]=='0')//输入值为零,数据结束
{
getchar();
break;
}
while((c=getchar())!='\n')//循环单词取单词末尾单词
end[n]=c; //记录单词结尾字母
n++;//标记单词数
c=getchar(); //读取下一个单词
}
visit=0;
memset(flag,0,sizeof(flag));
for(int i=0;i<n;i++)
{
if(start[i]=='b')
mmp=1;
}
if(mmp==1)//表示有字母
DFS('b');//用b开始DFS
if(visit)//有解
printf("Yes.\n");
else
printf("No.\n");
}
return 0;
}
//修订注释版2.0
//Start-ZJ
//2017/9/21/ 18:28