#include using namespace std; #define ll long long #define FOR(i, j, k, in) for (int i=j; i=k; i-=in) #define REP(i, j) FOR(i, 0, j, 1) #define RREP(i, j) FOR(i, j, 0, 1) #define ALL(a) a.begin(), a.end() #define RALL(a) a.end(), a.begin() #define F first #define S second #define PB push_back #define MP make_pair #define pii pair #define MOD 1000000007 struct node { int x, y; bool full; bool visited; vector neigh; }; pii dfs(node * n) { if (n->visited) { return {0, 0}; } n->visited = true; pii res = {1, n->neigh.size()}; for (node * n1: n->neigh) { pii add = dfs(n1); res.F += add.F; res.S += add.S; } return res; } bool solve() { ll r, s, n; cin >> r >> s >> n; vector> f(r, vector(s)); int x, y, k; char d; for (x=0; x> x >> y >> k >> d; x--; y--; dx=0, dy=0; if (d == 'D') { dx=1; } else if (d == 'U') { dx=-1; } else if (d == 'R') { dy=1; } else if (d == 'L') { dy=-1; } ox = x, oy = y; REP(j, k-2) { x += dx; y += dy; if (f[x][y].full) { // cout << "Double full" << endl; return false; } f[x][y].full = true; } x += dx; y += dy; f[ox][oy].neigh.PB(&f[x][y]); f[x][y].neigh.PB(&f[ox][oy]); } queue q; for (x=0; x 5) { // cout << "Edge mul" << endl; return false; } } } while (q.size()) { node n0 = *q.front(); q.pop(); for (node * n1: n0.neigh) { if (n1->full) { // cout << n0.x << " " << n0.y << endl; // cout << n1->x << " " << n1->y << endl; // cout << "Propagation" << endl; return false; } n1->full = true; q.push(n1); REP(i, n1->neigh.size()) { if (n1->neigh[i]->x == n0.x && n1->neigh[i]->y == n0.y) { n1->neigh[i] = n1->neigh[n1->neigh.size()-1]; n1->neigh.pop_back(); break; } } } n0.neigh = {}; } for (x=0; x a.F) { // cout << "Edges check" << endl; return false; } } } return true; } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); ll n=1; // cin >> n; REP(i, n) { cout << (solve() ? "Yes" : "No") << endl; } return 0; }