#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> dx = {{-1, 0, 1, 2, 1, 0}, {0, -1, -1, 0, 1, 1}};
vector<vector<int>> dy = {{0, -1, -1, 0, 1, 1}, {-1, 0, 1, 2, 1, 0}};
int main(){
  while (1){
    int n;
    cin >> n;
    if (n == 0){
      break;
    }
    vector<int> x(n), y(n);
    vector<char> d(n);
    for (int i = 0; i < n; i++){
      cin >> x[i] >> y[i] >> d[i];
    }
    map<int, map<int, int>> mp;
    for (int i = 0; i < n; i++){
      mp[x[i]][y[i]] = i;
      if (d[i] == 'x'){
        mp[x[i] + 1][y[i]] = i;
      }
      if (d[i] == 'y'){
        mp[x[i]][y[i] + 1] = i;
      }
    }
    vector<vector<int>> E(n * 2);
    for (int i = 0; i < n; i++){
      for (int j = 0; j < 6; j++){
        int x2 = x[i] + dx[d[i] - 'x'][j];
        int y2 = y[i] + dy[d[i] - 'x'][j];
        if (mp.count(x2)){
          if (mp[x2].count(y2)){
            int id = mp[x2][y2];
            if ((x[i] + y[i]) % 2 == (x[id] + y[id]) % 2){
              E[i * 2].push_back(id * 2 + 1);
              E[i * 2 + 1].push_back(id * 2);
            } else {
              E[i * 2].push_back(id * 2);
              E[i * 2 + 1].push_back(id * 2 + 1);
            }
          }
        }
      }
    }
    vector<int> c(n * 2, -1);
    int cnt = 0;
    for (int i = 0; i < n * 2; i++){
      if (c[i] == -1){
        c[i] = cnt;
        queue<int> Q;
        Q.push(i);
        while (!Q.empty()){
          int v = Q.front();
          Q.pop();
          for (int w : E[v]){
            if (c[w] == -1){
              c[w] = cnt;
              Q.push(w);
            }
          }
        }
        cnt++;
      }
    }
    bool ok = true;
    for (int i = 0; i < n; i++){
      if (c[i * 2] == c[i * 2 + 1]){
        ok = false;
      }
    }
    if (ok){
      cout << "Yes" << endl;
    } else {
      cout << "No" << endl;
    }
  }
}
