#include <bits/stdc++.h>
using namespace std;

typedef ostringstream OSS;
typedef istringstream ISS;

typedef long long LL;
typedef pair<int, int> PII;

typedef vector<int> VI;
typedef vector<VI> VVI;
typedef vector<LL> VLL;
typedef vector<VLL> VVLL;
typedef vector<double> VD;
typedef vector<VD> VVD;
typedef vector<string> VS;
typedef vector<VS> VVS;
typedef vector<bool> VB;
typedef vector<VB> VVB;
typedef vector<PII> VPII;

#define fst first
#define snd second
// #define Y first
// #define X second
#define MP make_pair
#define PB push_back
#define EB emplace_back 
#define ALL(x) (x).begin(),(x).end()
#define RANGE(x,y,maxX,maxY) (0 <= (x) && 0 <= (y) && (x) < (maxX) && (y) < (maxY))
#define DUMP( x ) cerr << #x << " = " << ( x ) << endl
#define rep(i, N) for (int i = 0; i < (int)(N); i++)
#define REP(i, init, N) for (int i = (init); i < (int)(N); i++)

template < typename T > inline T fromString(const string &s) { T res; ISS iss(s); iss >> res; return res; };
template < typename T > inline string toString(const T &a) { OSS oss; oss << a; return oss.str(); };

const int INF = 0x3f3f3f3f;
const LL INFL = 0x3f3f3f3f3f3f3f3fLL;
const double DINF = 0x3f3f3f3f;
const int DX[]={1,0,-1,0},DY[]={0,-1,0,1};
const double EPS = 1e-12;

struct Tile {
    int type;
    PII another;
};

int N;
map<PII, Tile> ts;

bool solve() {
    // p, set_type
    stack<pair<PII, int>> q;

    for (auto t : ts) {
        q.push(MP(t.fst, 0));
    }

    while (q.size()) {
        PII p = q.top().fst;
        int type = q.top().snd;
        Tile &t = ts[p];
        q.pop();

        if (t.type != 0) { // done
            if (type != 0 && t.type != type) {
                return false;
            }
            continue;
        }

        if (type == 0) { // init
            type = 1;
        }

        t.type = type;

        q.push(MP(t.another, type == 1 ? 2 : 1));

        REP(i, 0, 4) {
            PII np(p.fst + DY[i], p.snd + DX[i]);

            if (np != t.another && ts.count(np)) {
                q.push(MP(np, type));
            }
        }
    }

    return true;
}

int main(void) {
    while (cin >> N, N) {
        ts.clear();
        REP(i, 0, N) {
            int x, y;
            char dir;
            cin >> x >> y >> dir;

            PII p1(y, x);
            PII p2(y + (dir == 'y'), x + (dir == 'x'));

            Tile t1;
            Tile t2;

            t1.another = p2;
            t2.another = p1;

            t1.type = t2.type = 0;

            ts[p1] = t1;
            ts[p2] = t2;
        }

        cout << (solve() ? "Yes" : "No") << endl;
    }

	return 0;
}