← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var n int
	fmt.Fscan(in, &n)

	var x0, y0 int64
	fmt.Fscan(in, &x0, &y0)

	type piece struct {
		dist int64
		kind byte
	}

	// 0: U, 1: D, 2: R, 3: L
	// 4: UR, 5: DR, 6: UL, 7: DL
	closest := make([]piece, 8)
	for i := range closest {
		closest[i].dist = -1
	}

	var s string
	var xi, yi int64

	for i := 0; i < n; i++ {
		fmt.Fscan(in, &s, &xi, &yi)
		kind := s[0]
		dx := xi - x0
		dy := yi - y0

		var dir int = -1
		var d int64

		if dx == 0 {
			d = abs(dy)
			if dy > 0 {
				dir = 0
			} else {
				dir = 1
			}
		} else if dy == 0 {
			d = abs(dx)
			if dx > 0 {
				dir = 2
			} else {
				dir = 3
			}
		} else if abs(dx) == abs(dy) {
			d = abs(dx)
			if dx > 0 {
				if dy > 0 {
					dir = 4
				} else {
					dir = 5
				}
			} else {
				if dy > 0 {
					dir = 6
				} else {
					dir = 7
				}
			}
		}

		if dir != -1 {
			if closest[dir].dist == -1 || d < closest[dir].dist {
				closest[dir] = piece{d, kind}
			}
		}
	}

	ans := "NO"
	for i := 0; i < 4; i++ {
		if closest[i].dist != -1 {
			if closest[i].kind == 'R' || closest[i].kind == 'Q' {
				ans = "YES"
			}
		}
	}
	for i := 4; i < 8; i++ {
		if closest[i].dist != -1 {
			if closest[i].kind == 'B' || closest[i].kind == 'Q' {
				ans = "YES"
			}
		}
	}

	fmt.Fprintln(out, ans)
}

func abs(x int64) int64 {
	if x < 0 {
		return -x
	}
	return x
}
```