#include"iostream"
using namespace std;
char s[100];
char S[100],E[100];
int i=0,j;
int used[1000];
int sign=0,mark=0;
void dfs(int x)
{
if(E[x]=='m') { cout<<"Yes."<<endl; sign=1; mark=1; } //sign标志已经找到尾“m”,mark表示找到'm'的情况:如果找到则mark=1,否则mark=0;
else
{
for(int p=0; p<i; p++)
if(S[p]==E[x]) // 尾和首是否相等 (1)used[p]判断S[p]是否用过,以p为标志
{
if(used[p]==1) continue;
else { used[p]=1; dfs(p); if(mark==1) break; }
}
}
}
int main()
{
int n;
while(scanf("%s",s)!=EOF)
{
memset(used,0,sizeof(used));
mark=0; sign=0;
if(s[0]!='0') //将s[]首尾字母存入S[],E[],即比较首尾字母即可
{
S[i]=s[0];
E[i]=s[strlen(s)-1];
i++;
}
if(s[0]=='0')
{
int flag=0;
for(j=0; j<i; j++)
{
if(S[j]=='b')
{
used[j]=1; // used[]判断是否用过0 没用过;1用过
dfs(j);
if(sign==1) break; //sign==1时,标志找到“m” ,并且跳出
}
else flag++; //判断没b的情况
}
if(flag==i||mark==0) cout<<"No."<<endl; //mark==0表示没找到'm' ,flag==i表示'b'不存在
i=0; //运算完后从新初始化i
}
}
return 0;
}
http://acm.hdu.edu.cn/showproblem.php?pid=1181