# include # include # include # define N 205 char map[N][105]; struct node{ int from,to,next; }edge[2*N]; int head[N],tol,visit[N],dp[N][2],dup[N][2]; void add(int a,int b) { edge[tol].from=a;edge[tol].to=b;edge[tol].next=head[a];head[a]=tol++; } int max(int a,int b) { return a>b?a:b; } void dfs(int root) { int j,u; dp[root][0]=0; dp[root][1]=1; dup[root][0]=1; dup[root][1]=1; for(j=head[root];j!=-1;j=edge[j].next) { u=edge[j].to; dfs(u); dp[root][0]+=max(dp[u][0],dp[u][1]); dp[root][1]+=dp[u][0]; if(dp[u][0]>dp[u][1] && dp[u][0]==0) dup[root][0]=0; else if(dp[u][1]>dp[u][0] && dp[u][1]==0) dup[root][0]=0; else if(dp[u][0]==dp[u][1]) dup[root][0]=0; if(dup[u][0]==0) dup[root][1]=0; } } int main() { int i,j,n,k,ans1,ans2; char str1[105],str2[105]; while(scanf("%d",&n)!=EOF && n) { scanf("%s",map[1]); k=1; memset(head,-1,sizeof(head)); tol=0; for(i=1;idp[1][1] && dup[1][0]==1) printf("%d Yes\n",dp[1][0]); else if(dp[1][1]>dp[1][0] && dup[1][1]==1) printf("%d Yes\n",dp[1][1]); else printf("%d No\n",max(dp[1][0],dp[1][1])); } return 0; }