ll@h,@w,n=0; string@s[h]; maxflowf; f.malloc(h*w+2,1); rep(y,h){ int r=-1; rep(x,w){ int c=s[y][x]; if(c=='h'){ f.addEdge(h*w,y*w+x,1,0); r=x; } if(c=='r'){ ++n; f.addEdge(y*w+x,h*w+1,1,0); if(r>=0){ f.addEdge(y*w+r,y*w+x,1,0); } } } } rep(y,h){ int r=-1; rrep(x,w){ int c=s[y][x]; if(c=='h'){ r=x; } if(c=='r'){ if(r>=0){ f.addEdge(y*w+r,y*w+x,1,0); } } } } rep(x,w){ int r=-1; rep(y,h){ int c=s[y][x]; if(c=='h'){ r=y; } if(c=='r'){ if(r>=0){ f.addEdge(r*w+x,y*w+x,1,0); } } } } rep(x,w){ int r=-1; rrep(y,h){ int c=s[y][x]; if(c=='h'){ r=y; } if(c=='r'){ if(r>=0){ f.addEdge(r*w+x,y*w+x,1,0); } } } } wt(f.solve(h*w,h*w+1)==n?"Yes":"No");