#include <bits/stdc++.h>
using namespace std;
#define SZ(x) (int)(x.size())
#define REP(i, n) for(int i=0;i<(n);++i)
#define FOR(i, a, b) for(int i=(a);i<(b);++i)
#define RREP(i, n) for(int i=(int)(n)-1;i>=0;--i)
#define RFOR(i, a, b) for(int i=(int)(b)-1;i>=(a);--i)
#define ALL(a) a.begin(),a.end()
#define DUMP(x) cerr<<#x<<" = "<<(x)<<endl
#define DEBUG(x) cerr<<#x<<" = "<<(x)<<" (L"<<__LINE__<<")"<< endl;
using ll = long long;
using vi = vector<int>;
using vvi = vector<vi>;
using vll = vector<ll>;
using vvll = vector<vll>;
using P = pair<int, int>;
const double eps = 1e-8;
const ll MOD = 1000000007;
const int INF = INT_MAX / 2;
const ll LINF = LLONG_MAX / 2;
template <typename T1, typename T2>
bool chmax(T1 &a, const T2 &b) {
    if (a < b) { a = b; return true; }
    return false;
}
template <typename T1, typename T2>
bool chmin(T1 &a, const T2 &b) {
    if (a > b) { a = b; return true; }
    return false;
}
template<typename T1, typename T2>
ostream &operator<<(ostream &os, const map<T1, T2> &mp);
template<typename T>
ostream &operator<<(ostream &os, const vector<T> &v);

template<typename T1, typename T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &p) {
    os << "(" << p.first << ":" << p.second << ")";
    return os;
}
template<typename T1, typename T2>
ostream &operator<<(ostream &os, const map<T1, T2> &mp) {
    os << "{";
    int a = 0;
    for (auto &tp : mp) {
        if (a) os << ", "; a = 1;
        os << tp;
    }
    return os << "}";
}
template<typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
    os << "[";
    REP(i, SZ(v)) {
        if (i) os << ", ";
        os << v[i];
    }
    return os << "]";
}


int main() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(10);

    for (;;) {
        int n; cin >> n;
        if (n == 0) break;

        map<P, vector<P>> diff, same;

        REP(i, n) {
            int x, y; char dir;
            cin >> x >> y >> dir;
            if (dir == 'x') {
                diff[make_pair(x, y)].emplace_back(x+1, y);
                diff[make_pair(x+1, y)].emplace_back(x, y);

                if (diff.count(make_pair(x-1, y))) {
                    same[make_pair(x, y)].emplace_back(x-1, y);
                    same[make_pair(x-1, y)].emplace_back(x, y);
                }
                if (diff.count(make_pair(x, y-1))) {
                    same[make_pair(x, y)].emplace_back(x, y-1);
                    same[make_pair(x, y-1)].emplace_back(x, y);
                }
                if (diff.count(make_pair(x, y+1))) {
                    same[make_pair(x, y)].emplace_back(x, y+1);
                    same[make_pair(x, y+1)].emplace_back(x, y);
                }
                if (diff.count(make_pair(x+2, y))) {
                    same[make_pair(x+1, y)].emplace_back(x+2, y);
                    same[make_pair(x+2, y)].emplace_back(x+1, y);
                }
                if (diff.count(make_pair(x+1, y-1))) {
                    same[make_pair(x+1, y)].emplace_back(x+1, y-1);
                    same[make_pair(x+1, y-1)].emplace_back(x+1, y);
                }
                if (diff.count(make_pair(x+1, y+1))) {
                    same[make_pair(x+1, y)].emplace_back(x+1, y+1);
                    same[make_pair(x+1, y+1)].emplace_back(x+1, y);
                }
            }
            if (dir == 'y') {
                diff[make_pair(x, y)].emplace_back(x, y+1);
                diff[make_pair(x, y+1)].emplace_back(x, y);

                if (diff.count(make_pair(x, y-1))) {
                    same[make_pair(x, y)].emplace_back(x, y-1);
                    same[make_pair(x, y-1)].emplace_back(x, y);
                }
                if (diff.count(make_pair(x-1, y))) {
                    same[make_pair(x, y)].emplace_back(x-1, y);
                    same[make_pair(x-1, y)].emplace_back(x, y);
                }
                if (diff.count(make_pair(x+1, y))) {
                    same[make_pair(x, y)].emplace_back(x+1, y);
                    same[make_pair(x+1, y)].emplace_back(x, y);
                }
                if (diff.count(make_pair(x, y+2))) {
                    same[make_pair(x, y+1)].emplace_back(x, y+2);
                    same[make_pair(x, y+2)].emplace_back(x, y+1);
                }
                if (diff.count(make_pair(x-1, y+1))) {
                    same[make_pair(x, y+1)].emplace_back(x-1, y+1);
                    same[make_pair(x-1, y+1)].emplace_back(x, y+1);
                }
                if (diff.count(make_pair(x+1, y+1))) {
                    same[make_pair(x, y+1)].emplace_back(x+1, y+1);
                    same[make_pair(x+1, y+1)].emplace_back(x, y+1);
                }
            }
        }

        map<P,int> color;
        function<bool(P,int)> dfs = [&](P p, int c) {
            if (color[p] == -c) return false;
            if (color[p] == c) return true;
            color[p] = c;
            for (P& q : diff[p]) {
                if (!dfs(q, -c)) return false;
            }
            for (P& q : same[p]) {
                if (!dfs(q, c)) return false;
            }
            return true;
        };

        bool valid = true;
        for (auto &tp : diff) {
            if (color.count(tp.first)) continue;
            if (!dfs(tp.first, 1)) valid = false;
        }
        cout << (valid ? "Yes" : "No") << endl;
    }

    return 0;
}




Measured memory_bytes: 19248