#include <bits/stdc++.h>
 
using namespace std;
 
#define MAX 20000
typedef pair<int,int> pii;
 
map<pii,int> id;
map<int,pii> mp;
int color[MAX][2],tmp[MAX][2];
const int dx[4] = {-1,0,1,0};
const int dy[4] = {0,-1,0,1};
 
struct State{
    int v,p,col;
    State(int v,int p,int col) :
	v(v),p(p),col(col) {}
};
 
bool bfs(int v,int p){
    queue<State> Q;
    Q.push(State(v,p,0));
    Q.push(State(v+1,1-p,1));
   
    while(!Q.empty()){
	State s = Q.front(); Q.pop();
	pii np = mp[s.v];
	if(color[s.v/2][s.p] >= 0){
	    if(color[s.v/2][s.p] != s.col){
		return false;
	    }
	    continue;
	}
	color[s.v/2][s.p] = s.col;
	for(int i = 0 ; i < 4 ; i++){
	    int nx = np.first+dx[i],ny = np.second+dy[i];
	    if(id.find(pii(nx,ny)) != id.end()){
		int x = id[pii(nx,ny)]%2;
		if(id[np]/2 == id[pii(nx,ny)]/2){
		    Q.push(State(id[pii(nx,ny)],1-s.p,1-s.col));
		}else{
		    Q.push(State(id[pii(nx,ny)],(x&1?1:0),s.col));
		}
	    }
	}
    }
    return true;
}
 
void init(){
    mp.clear();
    id.clear();
    memset(color,-1,sizeof(color));
}
 
int main(){
    int N,x,y;
    char ch;
    while(cin >> N,N){
	init();
	for(int i = 0 ; i < N ; i++){
	    cin >> x >> y >> ch;
	    int j = i*2;
	    if(ch == 'x'){
		mp[j] = pii(x,y); mp[j+1] = pii(x+1,y);
		id[pii(x,y)] = j; id[pii(x+1,y)] = j+1;
	    }else{
		mp[j] = pii(x,y); mp[j+1] = pii(x,y+1);
		id[pii(x,y)] = j; id[pii(x,y+1)] = j+1;
	    }
	}
	bool can = true;
	for(int i = 0 ; i < 2*N ; i+=2){
	    if(color[i/2][0] >= 0) continue;
	    for(int j = 0 ; j < N ; j++){
		for(int k = 0 ; k < 2 ; k++){
		    tmp[j][k] = color[j][k];
		}
	    }
	    if(!bfs(i,0)) can = false;
	    if(!can){
		can = true;
		for(int j = 0 ; j < N ; j++){
		    for(int k = 0 ; k < 2 ; k++){
			color[j][k] = tmp[j][k];
		    }
		}
		if(!bfs(i,1)){
		    can = false;
		    break;
		}
	    }
	}
	cout << (can ? "Yes" : "No") << endl;
    }
    return 0;
}