#include<stdio.h>
#include<algorithm>
#include<map>
using namespace std;
int UF[100000];
int FIND(int a){
	if(UF[a]<0)return a;
	return UF[a]=FIND(UF[a]);
}
void UNION(int a,int b){
	a=FIND(a);b=FIND(b);
	if(a==b)return;
	UF[a]+=UF[b];UF[b]=a;
}
char in[2];
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
int x[30000];
int y[30000];
char d[30000];
int main(){
	int a;
	while(scanf("%d",&a),a){
		map<pair<int,int>,int>m;
		for(int i=0;i<a*4;i++)UF[i]=-1;
		for(int i=0;i<a;i++){
			int p,q;
			scanf("%d%d%s",&p,&q,in);
			x[i]=p;y[i]=q;d[i]=in[0];
			m[make_pair(p,q)]=i*2;
			if(in[0]=='y'){
				m[make_pair(p,q+1)]=i*2+1;
			}else{
				m[make_pair(p+1,q)]=i*2+1;
			}
			UNION(i*2*2,(i*2+1)*2+1);UNION(i*2*2+1,(i*2+1)*2);
		}
		for(int i=0;i<a;i++){
			int xt=x[i];int yt=y[i];
			if(d[i]=='x')xt++;
			else yt++;
			for(int j=0;j<4;j++){
				if(x[i]+dx[j]==xt&&y[i]+dy[j]==yt)continue;
				if(!m.count(make_pair(x[i]+dx[j],y[i]+dy[j])))continue;
				UNION(i*2*2,m[make_pair(x[i]+dx[j],y[i]+dy[j])]*2);
				UNION(i*2*2+1,m[make_pair(x[i]+dx[j],y[i]+dy[j])]*2+1);
			}
			for(int j=0;j<4;j++){
				if(x[i]-dx[j]==xt&&y[i]-dy[j]==yt)continue;
				if(!m.count(make_pair(xt+dx[j],yt+dy[j])))continue;
				UNION((i*2+1)*2,m[make_pair(xt+dx[j],yt+dy[j])]*2);
				UNION((i*2+1)*2+1,m[make_pair(xt+dx[j],yt+dy[j])]*2+1);
			}
		}
		bool ok=true;
		for(int i=0;i<a*2;i++)if(FIND(i*2)==FIND(i*2+1))ok=false;
		if(ok)printf("Yes\n");
		else printf("No\n");
	}
}