#include #include #include #include #include #include using namespace std; int main() { int n, q; cin >> n >> q; vector> v(n); map>> xtoy, ytox; for(int i = 0; i < n; i++) { cin >> v[i][0] >> v[i][1]; xtoy[v[i][0]].insert({v[i][1], i}); ytox[v[i][1]].insert({v[i][0], i}); } vector active(n, true); while(q--) { int id; char dir; cin >> id >> dir; id--; if(!active[id]) { cout << "ignore\n"; continue; } vector ret; while(true) { if(dir == 'N' || dir == 'S') { auto it = xtoy[v[id][0]].find({v[id][1], id}); assert(it != xtoy[v[id][0]].end()); if(dir == 'N') { it++; if(it == xtoy[v[id][0]].end()) break; } else { if(it == xtoy[v[id][0]].begin()) { break; } it--; } auto [_, id] = *it; if(active[id]) { ret.push_back(id+1); active[id] = false; } xtoy[v[id][0]].erase(it); } else { assert(dir == 'W' || dir == 'E'); auto it = ytox[v[id][1]].find({v[id][0], id}); assert(it != ytox[v[id][1]].end()); if(dir == 'E') { it++; if(it == ytox[v[id][1]].end()) break; } else { if(it == ytox[v[id][1]].begin()) break; it--; } auto [_, id] = *it; if(active[id]) { ret.push_back(id+1); active[id] = false; } ytox[v[id][1]].erase(it); } } cout << ret.size(); for(auto out: ret) cout << " " << out; cout << "\n"; } }