#include <iostream>
#include <vector>
#include <map>
#include <tuple>
#include <queue>
using namespace std;

using P = pair<int, int>;

struct futon {
    int x, y, dir;
    bool operator<(futon const& f) const {
        return x < f.x;
    }
};

int main() {
    int n;
    while(cin >> n, n) {
        vector<futon> v(n);
        map<P, int> m; // -1: head or foot, 0: none, 1: f, 2: h
        map<P, int> fidx;
        for(int i=0; i<n; ++i) {
            int x, y;
            char dir;
            cin >> x >> y >> dir;
            v[i] = {x, y, dir-'x'};
            m[make_pair(x, y)] = -1;
            fidx[make_pair(x, y)] = i;
            if(v[i].dir == 0) {
                x += 1;
                m[make_pair(x, y)] = -1;
            } else {
                y++;
                m[make_pair(x, y)] = -1;
            }
            fidx[make_pair(x, y)] = i;
        }
        bool ok = true;
        for(int i=0; i<n; ++i) {
            if(!ok) {
                break;
            }
            if(m[make_pair(v[i].x, v[i].y)] == -1) {
                queue<int> que;
                que.push(i);
                m[make_pair(v[i].x, v[i].y)] = 1; // foot
                if(v[i].dir == 0) {
                    m[make_pair(v[i].x+1, v[i].y)] = 2;
                } else {
                    m[make_pair(v[i].x, v[i].y+1)] = 2;
                }
                int dx[2][2][3] = {{{-1, 0, 0}, {1, 0, 0}},
                                   {{0, -1, 1}, {0, -1, 1}}};
                int dy[2][2][3] = {{{0, 1, -1}, {0, 1, -1}},
                                   {{-1, 0, 0}, {1, 0, 0}}};
                while(!que.empty()) {
                    int idx = que.front(); que.pop();
                    futon f = v[idx];
                    //cout << "futon: " << f.x << " " << f.y << " " << f.dir << endl;
                    int fh[2] = {};
                    fh[0] = m[make_pair(f.x, f.y)];
                    if(f.dir == 0) {
                        fh[1] = m[make_pair(f.x+1, f.y)];
                    } else {
                        fh[1] = m[make_pair(f.x, f.y+1)];
                    }
                    for(int j=0; j<2; ++j) {
                        int x = f.x, y = f.y;
                        if(j == 1) {
                            if(f.dir == 0) {
                                x += 1;
                            } else {
                                y += 1;
                            }
                        }
                        for(int k=0; k<3; ++k) {
                            P p = make_pair(x+dx[f.dir][j][k], y+dy[f.dir][j][k]);
                            //cout << "p: " << p.first << " " << p.second << endl;
                            if(m[p] == 1) {
                                if(fh[j] == 2) {
                                    //cout << "error1: " << p.first << " " << p.second << endl;
                                    ok = false;
                                }
                            } else if(m[p] == 2) {
                                if(fh[j] == 1) {
                                    //cout << "error2: " << p.first << " " << p.second << endl;
                                    ok = false;
                                }
                            } else if(m[p] == -1) {
                                futon next = v[fidx[p]];
                                m[p] = fh[j];
                                int next_fh = (fh[j] == 1 ? 2 : 1);
                                //cout << "m[p]: " << m[p] << endl;
                                if(next.x == p.first && next.y == p.second) {
                                    if(next.dir == 0) {
                                        m[make_pair(p.first+1, p.second)] = next_fh;
                                    } else {
                                        m[make_pair(p.first, p.second+1)] = next_fh;
                                    }
                                } else {
                                    if(next.dir == 0) {
                                        m[make_pair(p.first-1, p.second)] = next_fh;
                                    } else {
                                        m[make_pair(p.first, p.second-1)] = next_fh;
                                    }
                                }
                                que.push(fidx[p]);
                            }
                        }
                    }
                }
            }
        }
        if(ok) {
            cout << "Yes" << endl;
        } else {
            cout << "No" << endl;
        }
    }
}


Measured memory_bytes: 15484