#include using namespace std; using ll = long long; using ld = long double; #define rep(i, a, b) for(int i = a; i < (b); ++i) #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() typedef pair pii; typedef vector vi; struct TwoSat{int N; vector gr; vi values; TwoSat(int n = 0) : N(n), gr(2*n){} int addVar(){ gr.emplace_back(); gr.emplace_back(); return N++; } void either(int f, int j){ f = max(2*f, -1-2*f); j=max(2*j, -1-2*j); gr[f].push_back(j^1); gr[j].push_back(f^1); } void setValue(int x){either(x, x);} void atMostOne(const vi&li){ if(sz(li) <=1) return; int cur = ~li[0]; rep(i, 2,sz(li)){ int next = addVar(); either(cur, ~li[i]); either(cur, next); either(~li[i], next); cur = ~next; } either(cur, ~li[1]); } vi val, com, z; int time=0; int dfs(int i){ int low = val[i] = ++time, x; z.push_back(i); for(int e : gr[i])if(!com[e]) low = min(low, val[e]?:dfs(e)); if(low == val[i]) do { x =z.back(); z.pop_back(); com[x]=low; if(values[x>>1] == -1) values[x>>1] = x &1; }while(x !=i); return val[i] = low; } bool solve(){ values.assign(N, -1); val.assign(2*N, 0); com= val; rep(i, 0, 2*N) if( !com[i]) dfs(i); rep(i, 0, N) if(com[2*i] == com[2*i+1]) return 0; return 1; } }; unordered_map> mp = {{'U', make_pair(-1, 0)}, {'D', make_pair(+1, 0)}, {'R', make_pair(0, +1)}, {'L', make_pair(0, -1)}}; void ProGamerMove() { int n, m, k; cin >> n >> m >> k; vector> f(n, vector(m)); vector>> a(n, vector>(m)); TwoSat ts(k); for (int i = 0; i < k; ++i) { int x, y, l; cin >> y >> x >> l, --y, --x; char c; cin >> c; auto [dy, dx] = mp[c]; int cy = y + dy, cx = x + dx; for (int i = 0; i < l - 2; ++i) { if (f[cy][cx]) { cout << "No\n"; return; } f[cy][cx] = true; for (auto j : a[cy][cx]) ts.setValue(~j); cy += dy; cx += dx; } if (f[y][x]) ts.setValue(~i); if (f[cy][cx]) ts.setValue(i); a[y][x].push_back(i); a[cy][cx].push_back(~i); ts.either(i, ~i); } for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j) ts.atMostOne(a[i][j]); if (ts.solve()) cout << "Yes\n"; else cout << "No\n"; } int main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); int tc = 1; // cin >> tc; while(tc--) ProGamerMove(); }