#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 30
int m[N][N],flag,visit[N];
void dfs(int n)
{
int i;
if(n=='m'-'a')//从上一次dfs中找到了结尾是m的单词 说明结果成立
{
flag=1;
return;
}
for(i=0;i<26;i++)
{
if(m[n][i]==1&&!visit[i])//如果m[n][i]存在且没有访问过
{
visit[i]=1;
dfs(i);
}
}
}
int main()
{
char s[100];int len;
memset(m,0,sizeof(m));
memset(visit,0,sizeof(visit));//0代表还没有被搜索到
while(scanf("%s",s)&&s[0]!='0')
{
len=strlen(s);
m[s[0]-'a'][s[len-1]-'a']=1;//利用二维数组将单词按首尾字母分类
}
flag=0;
dfs(1);//1代表的是b 因为'b'-'a' =1
flag==1?printf("Yes.\n"):printf("No.\n");
return 0;
}
#include<string.h>
#include<stdlib.h>
#define N 30
int m[N][N],flag,visit[N];
void dfs(int n)
{
int i;
if(n=='m'-'a')//从上一次dfs中找到了结尾是m的单词 说明结果成立
{
flag=1;
return;
}
for(i=0;i<26;i++)
{
if(m[n][i]==1&&!visit[i])//如果m[n][i]存在且没有访问过
{
visit[i]=1;
dfs(i);
}
}
}
int main()
{
char s[100];int len;
memset(m,0,sizeof(m));
memset(visit,0,sizeof(visit));//0代表还没有被搜索到
while(scanf("%s",s)&&s[0]!='0')
{
len=strlen(s);
m[s[0]-'a'][s[len-1]-'a']=1;//利用二维数组将单词按首尾字母分类
}
flag=0;
dfs(1);//1代表的是b 因为'b'-'a' =1
flag==1?printf("Yes.\n"):printf("No.\n");
return 0;
}