#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define all(x) (x).begin(),(x).end()
const int mod=1000000007,MAX=40003;
const ll INF=1LL<<63;

int V,cmp[MAX];
vector<int> G[MAX],rG[MAX],vs;//vsがトポソの逆順になってる
bool used[MAX];

void add_edge(int from,int to){
    G[from].push_back(to);
    rG[to].push_back(from);
}

void DFS(int v){
    used[v]=1;
    for(int i=0;i<G[v].size();i++){
        if(used[G[v][i]]==0) DFS(G[v][i]);
    }
    vs.push_back(v);
}

void rDFS(int v,int k){
    used[v]=1;
    cmp[v]=k;
    for(int i=0;i<rG[v].size();i++){
        if(used[rG[v][i]]==0) rDFS(rG[v][i],k);
    }
}

int scc(){
    memset(used,0,sizeof(used));
    vs.clear();
    for(int v=0;v<V;v++){
        if(used[v]==0) DFS(v);
    }
    
    memset(used,0,sizeof(used));
    int k=0;
    for(int i=vs.size()-1;i>=0;i--){
        if(used[vs[i]]==0) rDFS(vs[i],k++);
    }
    return k;
}

void init(int si){
    V=2*si;
    for(int i=0;i<V;i++){
        G[i].clear();
        rG[i].clear();
    }
}

vector<int> dx={1,0,-1,0},dy={0,1,0,-1};

int main(){
    
    std::ifstream in("text.txt");
    std::cin.rdbuf(in.rdbuf());
    cin.tie(0);
    ios::sync_with_stdio(false);
    
    while(1){
        int N;cin>>N;
        if(N==0) break;
        init(N);
        
        map<pair<int,int>,int> MA;
        
        vector<int> x(N),y(N),dir(N);
        for(int i=0;i<N;i++){
            char c;
            cin>>x[i]>>y[i]>>c;
            
            if(c=='x'){
                dir[i]=0;
                MA[{x[i],y[i]}]=i;
                MA[{x[i]+1,y[i]}]=i;
            }else{
                dir[i]=1;
                MA[{x[i],y[i]}]=i;
                MA[{x[i],y[i]+1}]=i;
            }
        }
        
        for(int i=0;i<N;i++){
            int tox,toy;
            
            for(int k=0;k<4;k++){
                tox=x[i]+dx[k];toy=y[i]+dy[k];
                
                if(MA.count({tox,toy})&&MA[{tox,toy}]!=i){
                    int j=MA[{tox,toy}];
                    
                    if(x[j]==tox&&y[j]==toy){
                        add_edge(i,j);
                        add_edge(i+N,j+N);
                        
                        //cout<<i<<" "<<j<<" "<<0<<endl;
                    }else{
                        add_edge(i,j+N);
                        add_edge(i+N,j);
                        
                        //cout<<i<<" "<<j<<" "<<1<<endl;
                    }
                }
            }
            
            for(int k=0;k<4;k++){
                if(dir[i]==0){
                    tox=x[i]+dx[k]+1;toy=y[i]+dy[k];
                }else{
                    tox=x[i]+dx[k];toy=y[i]+dy[k]+1;
                }
                
                if(MA.count({tox,toy})&&MA[{tox,toy}]!=i){
                    int j=MA[{tox,toy}];
                    
                    if(x[j]==tox&&y[j]==toy){
                        add_edge(i,j+N);
                        add_edge(i+N,j);
                        
                        //cout<<i<<" "<<j<<" "<<1<<endl;
                    }else{
                        add_edge(i,j);
                        add_edge(i+N,j+N);
                        
                        //cout<<i<<" "<<j<<" "<<0<<endl;
                    }
                }
            }
            
        }
        
        scc();
        
        bool ok=true;
        
        for(int i=0;i<N;i++){
            if(cmp[i]==cmp[i+N]) ok=false;
        }
        
        if(ok) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
}




Measured memory_bytes: 11492