#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;

const int dy[4] = {1, 0, -1, 0};
const int dx[4] = {0, 1, 0, -1};
int n;
int x[20010], y[20010];
string dir[20010];
map<int, map<int, int>> mp;
int checked[20010];
int used[20010];

bool dfs(int curr, int p) {
  checked[curr] = 1;
  used[curr] = p;
  bool res = true;
  for (int i = 0; i < 4; i++) {
    int ny = y[curr] + dy[i];
    int nx = x[curr] + dx[i];
    int next = mp[ny][nx];
    if (!next || next == curr) continue;
    if (y[next] == ny && x[next] == nx) {
      res *= !used[next] ? dfs(next, p) : used[next] == p;
    } else {
      res *= !used[next] ? dfs(next, -p) : used[next] == -p;
    }
  }
  for (int i = 0; i < 4; i++) {
    int ny = y[curr] + dy[i] + (dir[curr] == "y");
    int nx = x[curr] + dx[i] + (dir[curr] == "x");
    int next = mp[ny][nx];
    if (!next || next == curr) continue;
    if (y[next] == ny && x[next] == nx) {
      res *= !used[next] ? dfs(next, -p) : used[next] == -p;
    } else {
      res *= !used[next] ? dfs(next, p) : used[next] == p;
    }
  }
  used[curr] = 0;
  return res;
}

int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(false);
  cout << fixed << setprecision(10);
  
  while (cin >> n, n) {
    mp.clear();
    fill_n((int*)checked, 20010, 0);
    for (int i = 1; i <= n; i++) {
      cin >> x[i] >> y[i] >> dir[i];
      mp[y[i]][x[i]] = i;
      mp[y[i] + (dir[i] == "y")][x[i] + (dir[i] == "x")] = i;
    }
    string ans = "Yes";
    for (int i = 1; i <= n; i++) {
      if (checked[i]) continue;
      fill_n((int*)used, 20010, 0);
      if (dfs(i, 1)) continue;
      fill_n((int*)used, 20010, 0);
      if (dfs(i, -1)) continue;
      ans = "No";
    }
    cout << ans << endl;
  }  

  return 0;
}
