#include <iostream>
#include <vector>
#include <queue>
using namespace std;
// 회전 정보 구조체
typedef struct turn {
char dir; // 회전 방향
int left; // 회전까지 남은 시간
};
int N, L;
int map[101][101] = { 0 };
vector <turn> t;
queue <int> sr, sc; // 뱀의 행, 열 위치를 저장할 큐
int dir[4][2] = { { -1,0 },{ 0,1 },{ 1,0 },{ 0,-1 } }; // 방향에 따른 이동 정보
// 풀이 함수
int solve(int cdir, int ctime) {
// 사망검사 (범위 초과, 몸과 접촉)
if (sr.back() < 1 || sr.back() > N || sc.back() < 1 || sc.back() > N) return ctime;
if (map[sr.back()][sc.back()] == 2) return ctime;
// 빈판일 경우 꼬리 제거
if (map[sr.back()][sc.back()] == 0) {
map[sr.front()][sc.front()] = 0;
// 머리와 꼬리가 같으면 pop하지 않는다.
if (sr.front() != sc.front() || sr.back() != sc.back()) {
sr.pop();
sc.pop();
}
}
// 몸 체크
map[sr.back()][sc.back()] = 2;
// 회전
for (int i = 0; i < L; i++) {
if (t[i].left == 0) {
if (t[i].dir == 'L') cdir = (cdir + 3) % 4;
if (t[i].dir == 'D') cdir = (cdir + 1) % 4;
}
t[i].left--;
}
// 바라보는 방향으로 새로운 머리 추가
int nr = sr.back() + dir[cdir][0];
int nc = sc.back() + dir[cdir][1];
sr.push(nr);
sc.push(nc);
return solve(cdir, ctime + 1);
}
int main() {
int K;
int ar, ac;
cin >> N >> K;
for (int i = 0; i < K; i++) { // 사과 배치
cin >> ar >> ac;
map[ar][ac] = 1;
}
cin >> L;
t.resize(L);
for (int i = 0; i < L; i++) { // 회전 정보 입력
cin >> t[i].left >> t[i].dir;
}
sr.push(1); // 시작 주소 (1, 1)
sc.push(1);
cout << solve(1, 0);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLy8g7ZqM7KCEIOygleuztCDqtazsobDssrQKdHlwZWRlZiBzdHJ1Y3QgdHVybiB7CiAgICBjaGFyIGRpcjsgICAgLy8g7ZqM7KCEIOuwqe2WpQogICAgaW50IGxlZnQ7ICAgIC8vIO2ajOyghOq5jOyngCDrgqjsnYAg7Iuc6rCECn07CiAKaW50IE4sIEw7CmludCBtYXBbMTAxXVsxMDFdID0geyAwIH07CnZlY3RvciA8dHVybj4gdDsKcXVldWUgPGludD4gc3IsIHNjOyAgICAvLyDrsYDsnZgg7ZaJLCDsl7Qg7JyE7LmY66W8IOyggOyepe2VoCDtgZAKaW50IGRpcls0XVsyXSA9IHsgeyAtMSwwIH0seyAwLDEgfSx7IDEsMCB9LHsgMCwtMSB9IH07ICAgIC8vIOuwqe2WpeyXkCDrlLDrpbgg7J2064+ZIOygleuztAogCi8vIO2SgOydtCDtlajsiJgKaW50IHNvbHZlKGludCBjZGlyLCBpbnQgY3RpbWUpIHsKICAgIC8vIOyCrOunneqygOyCrCAo67KU7JyEIOy0iOqzvCwg66q46rO8IOygkey0iSkKICAgIGlmIChzci5iYWNrKCkgPCAxIHx8IHNyLmJhY2soKSA+IE4gfHwgc2MuYmFjaygpIDwgMSB8fCBzYy5iYWNrKCkgPiBOKSAgICByZXR1cm4gY3RpbWU7CiAgICBpZiAobWFwW3NyLmJhY2soKV1bc2MuYmFjaygpXSA9PSAyKSAgICByZXR1cm4gY3RpbWU7CiAKICAgIC8vIOu5iO2MkOydvCDqsr3smrAg6rys66asIOygnOqxsAogICAgaWYgKG1hcFtzci5iYWNrKCldW3NjLmJhY2soKV0gPT0gMCkgewogICAgICAgIG1hcFtzci5mcm9udCgpXVtzYy5mcm9udCgpXSA9IDA7CiAgICAgICAgLy8g66i466as7JmAIOq8rOumrOqwgCDqsJnsnLzrqbQgcG9w7ZWY7KeAIOyViuuKlOuLpC4KICAgICAgICBpZiAoc3IuZnJvbnQoKSAhPSBzYy5mcm9udCgpIHx8IHNyLmJhY2soKSAhPSBzYy5iYWNrKCkpIHsKICAgICAgICAgICAgc3IucG9wKCk7CiAgICAgICAgICAgIHNjLnBvcCgpOwogICAgICAgIH0KICAgIH0KICAgIC8vIOuquCDssrTtgawKICAgIG1hcFtzci5iYWNrKCldW3NjLmJhY2soKV0gPSAyOwogCiAgICAvLyDtmozsoIQKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTDsgaSsrKSB7CiAgICAgICAgaWYgKHRbaV0ubGVmdCA9PSAwKSB7CiAgICAgICAgICAgIGlmICh0W2ldLmRpciA9PSAnTCcpICAgIGNkaXIgPSAoY2RpciArIDMpICUgNDsKICAgICAgICAgICAgaWYgKHRbaV0uZGlyID09ICdEJykgICAgY2RpciA9IChjZGlyICsgMSkgJSA0OwogICAgICAgIH0KICAgICAgICB0W2ldLmxlZnQtLTsKICAgIH0KIAogICAgLy8g67CU652867O064qUIOuwqe2WpeycvOuhnCDsg4jroZzsmrQg66i466asIOy2lOqwgAogICAgaW50IG5yID0gc3IuYmFjaygpICsgZGlyW2NkaXJdWzBdOwogICAgaW50IG5jID0gc2MuYmFjaygpICsgZGlyW2NkaXJdWzFdOwogICAgc3IucHVzaChucik7CiAgICBzYy5wdXNoKG5jKTsKICAgIHJldHVybiBzb2x2ZShjZGlyLCBjdGltZSArIDEpOwp9CiAKaW50IG1haW4oKSB7CiAgICBpbnQgSzsKICAgIGludCBhciwgYWM7CiAgICBjaW4gPj4gTiA+PiBLOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBLOyBpKyspIHsgICAgLy8g7IKs6rO8IOuwsOy5mAogICAgICAgIGNpbiA+PiBhciA+PiBhYzsKICAgICAgICBtYXBbYXJdW2FjXSA9IDE7CiAgICB9CiAgICBjaW4gPj4gTDsKICAgIHQucmVzaXplKEwpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBMOyBpKyspIHsgICAgLy8g7ZqM7KCEIOygleuztCDsnoXroKUKICAgICAgICBjaW4gPj4gdFtpXS5sZWZ0ID4+IHRbaV0uZGlyOwogICAgfQogICAgc3IucHVzaCgxKTsgICAgLy8g7Iuc7J6RIOyjvOyGjCAoMSwgMSkKICAgIHNjLnB1c2goMSk7CiAgICBjb3V0IDw8IHNvbHZlKDEsIDApOwogICAgcmV0dXJuIDA7Cn0=