#include <bits/stdc++.h>
using namespace std;
#define int long long
#define arr array 
#define vec vector 
#define pii pair<int, int>
#define fir first 
#define sec second 
const int N = 2e5 + 5;
int n;
arr<int, N> x, y;
arr<char, N> dr;
map<int, vec<pii>> dgn;
void dgn_cmp() {
    for (int i = 1; i <= n; i++) {
        dgn[x[i] + y[i]].push_back({x[i], i});
    }
    for (auto &x : dgn) {
        sort(x.sec.begin(), x.sec.end());
    }
//     for (pair<int, vec<pii>> x : dgn) {
//         cout << x.fir << ": ";
//         for (pii z : x.sec) cout << z.sec << " ";
//         cout << '\n';
//     }
}
void ans_cmp() {
    vec<int> ans;
    for (pair<int, vec<pii>> x : dgn) {
        vec<pii> y;
        for (pii z : x.sec) {
            if (y.size() && dr[y.back().sec] == 'E' && dr[z.sec] == 'S')
                y.pop_back();
            else 
                y.push_back(z);
        }
        for (pii z : y) ans.push_back(z.sec);
    }
    for (int i : ans) cout << i << '\n';
}
signed main() {
    // freopen("in", "r", stdin);
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> x[i] >> y[i] >> dr[i];
    dgn_cmp();
    ans_cmp();
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |