#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll oo = 2e18;
const int N = 2e5+5;
const int M = 3e4+5;
struct Cand {
ll dist;
int r, c;
int u, v;
bool operator<(const Cand& o) const {
if (dist != o.dist) return dist > o.dist;
if (r != o.r) return r < o.r;
return c < o.c;
}
};
int n, m, mask[N];
pair<int, int> history[M];
set<int> rows;
set<Cand> pool;
Cand gap[N], partial[N];
ll get_dist(int r, int c, int idx) {
if (idx <= 0 || idx > n) return oo;
ll d = oo;
if (mask[idx] & 1) d = min(d, 1LL * (r - idx) * (r - idx) + 1LL * (c - 1) * (c - 1));
if (mask[idx] & 2) d = min(d, 1LL * (r - idx) * (r - idx) + 1LL * (c - 2) * (c - 2));
return d;
}
Cand calc(int u, int v) {
Cand best = {-1, -1, -1, u, v};
if (u == v) {
if (__builtin_popcount(mask[u]) == 1) {
best.r = u;
best.c = (mask[u] & 1) ? 2 : 1;
best.dist = 1;
}
return best;
}
if (u == 0 && v == n + 1) return {oo, 1, 1, 0, n + 1};
if (u + 1 > v - 1) return best;
auto update = [&](int r, int c) {
ll d = min(get_dist(r, c, u), get_dist(r, c, v));
Cand cur = {d, r, c, u, v};
if (best.dist == -1 || cur < best) best = cur;
};
if (u == 0) {
for (int c = 1; c <= 2; c++) update(1, c);
} else if (v == n + 1) {
for (int c = 1; c <= 2; c++) update(n, c);
} else {
int mid = (u + v) / 2;
for (int r = max(u + 1, mid - 1); r <= min(v - 1, mid + 1); r++)
for (int c = 1; c <= 2; c++) update(r, c);
}
return best;
}
void remove(int u, int v) {
Cand &temp = (u == v) ? partial[u] : gap[u];
if (temp.dist != -1) {
pool.erase(temp);
temp.dist = -1;
}
}
void add(int u, int v) {
Cand res = calc(u, v);
if (res.dist != -1) {
pool.insert(res);
if (u == v) partial[u] = res;
else gap[u] = res;
}
}
void solve() {
cin >> n >> m;
rows.insert(0);
rows.insert(n + 1);
for (int i = 0; i <= n + 1; i++) {
gap[i].dist = -1;
partial[i].dist = -1;
}
add(0, n + 1);
for (int i = 1; i <= m; i++) {
char op; cin >> op;
if (op == 'E') {
Cand best = *pool.begin();
int r = best.r, c = best.c;
cout << r << ' ' << c << '\n';
history[i] = {r, c};
int u = best.u, v = best.v;
remove(u, v);
if (u == v) {
auto it = rows.find(r);
int prv = *prev(it), nxt = *next(it);
remove(prv, r); remove(r, nxt);
mask[r] |= (1 << (c - 1));
add(prv, r); add(r, nxt);
} else {
auto it = rows.upper_bound(r);
int prv = *prev(it), nxt = *it;
mask[r] |= (1 << (c - 1));
rows.insert(r);
add(prv, r); add(r, nxt); add(r, r);
}
} else if (op == 'L') {
int p; cin >> p;
int r = history[p].first, c = history[p].second;
auto it = rows.find(r);
int prv = *prev(it), nxt = *next(it);
remove(prv, r); remove(r, nxt); remove(r, r);
mask[r] &= ~(1 << (c - 1));
if (__builtin_popcount(mask[r]) == 0) {
rows.erase(it); add(prv, nxt);
} else {
add(prv, r); add(r, nxt); add(r, r);
}
}
}
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
#define TASK "XLH"
if (fopen(TASK".INP", "r")) {
freopen(TASK".INP", "r", stdin);
freopen(TASK".OUT", "w", stdout);
}
int tests = 1; // cin >> tests;
while (tests--) solve();
#ifdef LOCAL
cerr << "\nTime elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBsbCA9IGxvbmcgbG9uZzsKCmNvbnN0IGxsIG9vID0gMmUxODsKY29uc3QgaW50IE4gPSAyZTUrNTsKY29uc3QgaW50IE0gPSAzZTQrNTsKCnN0cnVjdCBDYW5kIHsKICAgIGxsIGRpc3Q7CiAgICBpbnQgciwgYzsKICAgIGludCB1LCB2OwogICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgQ2FuZCYgbykgY29uc3QgewogICAgICAgIGlmIChkaXN0ICE9IG8uZGlzdCkgcmV0dXJuIGRpc3QgPiBvLmRpc3Q7CiAgICAgICAgaWYgKHIgIT0gby5yKSByZXR1cm4gciA8IG8ucjsKICAgICAgICByZXR1cm4gYyA8IG8uYzsKICAgIH0gCn07CgppbnQgbiwgbSwgbWFza1tOXTsKcGFpcjxpbnQsIGludD4gaGlzdG9yeVtNXTsKCnNldDxpbnQ+IHJvd3M7CnNldDxDYW5kPiBwb29sOwpDYW5kIGdhcFtOXSwgcGFydGlhbFtOXTsKCmxsIGdldF9kaXN0KGludCByLCBpbnQgYywgaW50IGlkeCkgewogICAgaWYgKGlkeCA8PSAwIHx8IGlkeCA+IG4pIHJldHVybiBvbzsKICAgIGxsIGQgPSBvbzsKICAgIGlmIChtYXNrW2lkeF0gJiAxKSBkID0gbWluKGQsIDFMTCAqIChyIC0gaWR4KSAqIChyIC0gaWR4KSArIDFMTCAqIChjIC0gMSkgKiAoYyAtIDEpKTsKICAgIGlmIChtYXNrW2lkeF0gJiAyKSBkID0gbWluKGQsIDFMTCAqIChyIC0gaWR4KSAqIChyIC0gaWR4KSArIDFMTCAqIChjIC0gMikgKiAoYyAtIDIpKTsKICAgIHJldHVybiBkOwp9CgpDYW5kIGNhbGMoaW50IHUsIGludCB2KSB7CiAgICBDYW5kIGJlc3QgPSB7LTEsIC0xLCAtMSwgdSwgdn07CiAgICBpZiAodSA9PSB2KSB7CiAgICAgICAgaWYgKF9fYnVpbHRpbl9wb3Bjb3VudChtYXNrW3VdKSA9PSAxKSB7CiAgICAgICAgICAgIGJlc3QuciA9IHU7CiAgICAgICAgICAgIGJlc3QuYyA9IChtYXNrW3VdICYgMSkgPyAyIDogMTsKICAgICAgICAgICAgYmVzdC5kaXN0ID0gMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJlc3Q7CiAgICB9CiAgICBpZiAodSA9PSAwICYmIHYgPT0gbiArIDEpIHJldHVybiB7b28sIDEsIDEsIDAsIG4gKyAxfTsKICAgIGlmICh1ICsgMSA+IHYgLSAxKSByZXR1cm4gYmVzdDsKCiAgICBhdXRvIHVwZGF0ZSA9IFsmXShpbnQgciwgaW50IGMpIHsKICAgICAgICBsbCBkID0gbWluKGdldF9kaXN0KHIsIGMsIHUpLCBnZXRfZGlzdChyLCBjLCB2KSk7CiAgICAgICAgQ2FuZCBjdXIgPSB7ZCwgciwgYywgdSwgdn07CiAgICAgICAgaWYgKGJlc3QuZGlzdCA9PSAtMSB8fCBjdXIgPCBiZXN0KSBiZXN0ID0gY3VyOwogICAgfTsKCiAgICBpZiAodSA9PSAwKSB7CiAgICAgICAgZm9yIChpbnQgYyA9IDE7IGMgPD0gMjsgYysrKSB1cGRhdGUoMSwgYyk7CiAgICB9IGVsc2UgaWYgKHYgPT0gbiArIDEpIHsKICAgICAgICBmb3IgKGludCBjID0gMTsgYyA8PSAyOyBjKyspIHVwZGF0ZShuLCBjKTsKICAgIH0gZWxzZSB7CiAgICAgICAgaW50IG1pZCA9ICh1ICsgdikgLyAyOwogICAgICAgIGZvciAoaW50IHIgPSBtYXgodSArIDEsIG1pZCAtIDEpOyByIDw9IG1pbih2IC0gMSwgbWlkICsgMSk7IHIrKykKICAgICAgICAgICAgZm9yIChpbnQgYyA9IDE7IGMgPD0gMjsgYysrKSB1cGRhdGUociwgYyk7CiAgICB9CiAgICByZXR1cm4gYmVzdDsKfQoKdm9pZCByZW1vdmUoaW50IHUsIGludCB2KSB7CiAgICBDYW5kICZ0ZW1wID0gKHUgPT0gdikgPyBwYXJ0aWFsW3VdIDogZ2FwW3VdOwogICAgaWYgKHRlbXAuZGlzdCAhPSAtMSkgewogICAgICAgIHBvb2wuZXJhc2UodGVtcCk7CiAgICAgICAgdGVtcC5kaXN0ID0gLTE7CiAgICB9Cn0KCnZvaWQgYWRkKGludCB1LCBpbnQgdikgewogICAgQ2FuZCByZXMgPSBjYWxjKHUsIHYpOwogICAgaWYgKHJlcy5kaXN0ICE9IC0xKSB7CiAgICAgICAgcG9vbC5pbnNlcnQocmVzKTsKICAgICAgICBpZiAodSA9PSB2KSBwYXJ0aWFsW3VdID0gcmVzOwogICAgICAgIGVsc2UgZ2FwW3VdID0gcmVzOwogICAgfQp9Cgp2b2lkIHNvbHZlKCkgewogICAgY2luID4+IG4gPj4gbTsKCiAgICByb3dzLmluc2VydCgwKTsKICAgIHJvd3MuaW5zZXJ0KG4gKyAxKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IG4gKyAxOyBpKyspIHsKICAgICAgICBnYXBbaV0uZGlzdCA9IC0xOwogICAgICAgIHBhcnRpYWxbaV0uZGlzdCA9IC0xOwogICAgfQogICAgYWRkKDAsIG4gKyAxKTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtOyBpKyspIHsKICAgICAgICBjaGFyIG9wOyBjaW4gPj4gb3A7CiAgICAgICAgaWYgKG9wID09ICdFJykgewogICAgICAgICAgICBDYW5kIGJlc3QgPSAqcG9vbC5iZWdpbigpOwogICAgICAgICAgICBpbnQgciA9IGJlc3QuciwgYyA9IGJlc3QuYzsKICAgICAgICAgICAgY291dCA8PCByIDw8ICcgJyA8PCBjIDw8ICdcbic7CgogICAgICAgICAgICBoaXN0b3J5W2ldID0ge3IsIGN9OwogICAgICAgICAgICBpbnQgdSA9IGJlc3QudSwgdiA9IGJlc3QudjsKICAgICAgICAgICAgcmVtb3ZlKHUsIHYpOwogICAgICAgICAgICBpZiAodSA9PSB2KSB7CiAgICAgICAgICAgICAgICBhdXRvIGl0ID0gcm93cy5maW5kKHIpOwogICAgICAgICAgICAgICAgaW50IHBydiA9ICpwcmV2KGl0KSwgbnh0ID0gKm5leHQoaXQpOwogICAgICAgICAgICAgICAgcmVtb3ZlKHBydiwgcik7IHJlbW92ZShyLCBueHQpOwoKICAgICAgICAgICAgICAgIG1hc2tbcl0gfD0gKDEgPDwgKGMgLSAxKSk7CgogICAgICAgICAgICAgICAgYWRkKHBydiwgcik7IGFkZChyLCBueHQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYXV0byBpdCA9IHJvd3MudXBwZXJfYm91bmQocik7CiAgICAgICAgICAgICAgICBpbnQgcHJ2ID0gKnByZXYoaXQpLCBueHQgPSAqaXQ7CgogICAgICAgICAgICAgICAgbWFza1tyXSB8PSAoMSA8PCAoYyAtIDEpKTsKICAgICAgICAgICAgICAgIHJvd3MuaW5zZXJ0KHIpOwoKICAgICAgICAgICAgICAgIGFkZChwcnYsIHIpOyBhZGQociwgbnh0KTsgYWRkKHIsIHIpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChvcCA9PSAnTCcpIHsKICAgICAgICAgICAgaW50IHA7IGNpbiA+PiBwOwogICAgICAgICAgICBpbnQgciA9IGhpc3RvcnlbcF0uZmlyc3QsIGMgPSBoaXN0b3J5W3BdLnNlY29uZDsKCiAgICAgICAgICAgIGF1dG8gaXQgPSByb3dzLmZpbmQocik7CiAgICAgICAgICAgIGludCBwcnYgPSAqcHJldihpdCksIG54dCA9ICpuZXh0KGl0KTsKICAgICAgICAgICAgcmVtb3ZlKHBydiwgcik7IHJlbW92ZShyLCBueHQpOyByZW1vdmUociwgcik7CgogICAgICAgICAgICBtYXNrW3JdICY9IH4oMSA8PCAoYyAtIDEpKTsKICAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9wb3Bjb3VudChtYXNrW3JdKSA9PSAwKSB7CiAgICAgICAgICAgICAgICByb3dzLmVyYXNlKGl0KTsgYWRkKHBydiwgbnh0KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGFkZChwcnYsIHIpOyBhZGQociwgbnh0KTsgYWRkKHIsIHIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBjaW4udGllKE5VTEwpOwoKICAgICNkZWZpbmUgVEFTSyAiWExIIgogICAgaWYgKGZvcGVuKFRBU0siLklOUCIsICJyIikpIHsKICAgICAgICBmcmVvcGVuKFRBU0siLklOUCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oVEFTSyIuT1VUIiwgInciLCBzdGRvdXQpOwogICAgfQoKICAgIGludCB0ZXN0cyA9IDE7IC8vIGNpbiA+PiB0ZXN0czsKICAgIHdoaWxlICh0ZXN0cy0tKSBzb2x2ZSgpOwoKICAgICNpZmRlZiBMT0NBTAogICAgY2VyciA8PCAiXG5UaW1lIGVsYXBzZWQ6ICIgPDwgMS4wICogY2xvY2soKSAvIENMT0NLU19QRVJfU0VDIDw8ICIgcy5cbiI7CiAgICAjZW5kaWYKICAgIHJldHVybiAwOwp9