#include using namespace std; #define REP(i, n) for(int i=0; i<(n); ++i) #define FOR(i, a, b) for(int i=(a); i<=(b); ++i) #define FORD(i, a, b) for(int i=(a); i>=(b); --i) #define ll long long #define vi vector #define pii pair #define mp make_pair #define X first #define Y second typedef pair< pii, pii > Segment; pii operator- (pii L, pii R) { return mp(L.X - R.X, L.Y - R.Y); } Segment operator- (Segment L, Segment R) { return mp(L.X - R.X, L.Y - R.Y); } const int INF = 1<<29; vector< Segment > picture[2]; Segment norm(Segment A) { if (A.X > A.Y) return mp(A.Y, A.X); return A; } vector< Segment > read_picture(int Q) { vector< Segment > ans; pii pos = mp(0, 0); while (Q--) { pii p; char c; scanf("%c %d %d ", &c, &p.X, &p.Y); p.X += pos.X; p.Y += pos.Y; if (c == 'L') { ans.push_back(norm(mp(pos,p))); } pos = p; } return ans; } bool same_dir(Segment A, Segment B) { int dx1 = A.X.X - A.Y.X; int dx2 = B.X.X - B.Y.X; int dy1 = A.X.Y - A.Y.Y; int dy2 = B.X.Y - B.Y.Y; return (ll)dx1 * dy2 == (ll)dx2 * dy1; } ll cross(pii A, pii B) { return (ll)A.X * B.Y - (ll)A.Y * B.X; } bool point_on_segment(pii P, Segment A) { if (P == A.X || P == A.Y) return true; pii p1 = A.X; pii p2 = A.Y; bool ok1, ok2, ok3; ok1 = p1.X <= P.X && P.X <= p2.X; ok2 = (p1.Y <= P.Y && P.Y <= p2.Y) || (p1.Y >= P.Y && P.Y >= p2.Y); ok3 = (cross((p2 - p1), (P - p1)) == 0); return ok1 && ok2 && ok3; } vector normalize(vector pic) { REP(i, pic.size()) { FOR(j, i + 1, pic.size() - 1) { if (!same_dir(pic[i], pic[j])) continue; // printf("hit1!\n"); if (point_on_segment(pic[i].X, pic[j]) || point_on_segment(pic[j].X, pic[i])) { // printf("hit2!\n"); pic[i].X = min(pic[i].X, pic[j].X); pic[i].Y = max(pic[i].Y, pic[j].Y); pic[j] = pic[pic.size() - 1]; pic.pop_back(); j = i; } } } sort(pic.begin(), pic.end()); FORD(i, (int)pic.size() - 1, 0) { pic[i] = mp(pic[i].X - pic[0].X, pic[i].Y - pic[0].X); } return pic; } void print_picture(vector pic) { /* printf("Obrazek: %d usecek\n", pic.size()); REP(i, pic.size()) { printf("Usecka %d: (%d, %d) - (%d, %d)\n", i, pic[i].X.X, pic[i].X.Y, pic[i].Y.X, pic[i].Y.Y); } */ } int main() { int Q; while(scanf(" %d ", &Q) == 1) { picture[0] = read_picture(Q); scanf("%d ", &Q); picture[1] = read_picture(Q); REP(k, 2) { print_picture(picture[k]); print_picture(normalize(picture[k])); } if (normalize(picture[0]) == normalize(picture[1])) { printf("YES\n"); } else { printf("NO\n"); } } return 0; }