1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
#define ll long long
#define pii pair<int, int>
#define pb push_back
const int s1 = (int)1e5 + 5;
const int s2 = (int)1e6 + 5;
const int inf = (int)1e9;
int ceo[s1], siz[s1], tim[s1][2], jump[s1][20], maxi[s1][20], tree[s1][20], ans[s2];
bool iss[s2];
vector<vector<int>>v;
vector<pii>mst[s1];
int find_(int i) {
    if (ceo[i] == i) return i;
    return ceo[i] = find_(ceo[i]);
}
void union_(int a, int b) {
    a = find_(a);
    b = find_(b);
    if (siz[b] > siz[a]) swap (a, b);
    ceo[b] = a;
    siz[a] += siz[b];
}
int it = 1;
void dfs_tim(int node, int par) {
    tim[node][0] = it++;
    for (pii i : mst[node]) {
        if (i.first != par) dfs_tim(i.first, node);
    }
    tim[node][1] = it++;
}
void dfs_jump(int node, int par) {
    jump[node][0] = par;
    for (int i = 1; i <= 17; i++) jump[node][i] = jump[jump[node][i - 1]][i - 1];
    for (int i = 1; i <= 17; i++) maxi[node][i] = max(maxi[node][i - 1], maxi[jump[node][i - 1]][i - 1]);
    for (pii i : mst[node]) {
        if (i.first != par) {
            maxi[i.first][0] = i.second;
            dfs_jump(i.first, node);
        }
    }
}
void dfs_ans(int node, int par) {
    for (pii i : mst[node]) {
        if (i.first != par) dfs_ans(i.first, node);
    }
    int mini = inf;
    for (int i = 17; i >= 1; i--) {
        tree[jump[node][i - 1]][i - 1] = min(tree[node][i], tree[jump[node][i - 1]][i - 1]);
        tree[node][i - 1] = min(tree[node][i], tree[node][i - 1]);
    }
}
bool is_anc(int a, int b) {
    return ((tim[a][0] <= tim[b][0]) & (tim[a][1] >= tim[b][1]));
}
int lca_(int a, int b) {
    if (is_anc(a, b)) return a;
    if (is_anc(b, a)) return b;
    for (int i = 17; i >= 0; i--) {
        if (!is_anc(jump[b][i], a)) b = jump[b][i];
    }
    return jump[b][0];
}
int max_path(int a, int b) {
    int maxx = 0, lcaab = lca_(a, b);
    for (int i = 17; i >= 0; i--) {
        if (!is_anc(jump[a][i], lcaab)) {
            maxx = max(maxx, maxi[a][i]);
            a = jump[a][i];
        }

        if (!is_anc(jump[b][i], lcaab)) {
            maxx = max(maxx, maxi[b][i]);
            b = jump[b][i];
        }
    }
    if (a != lcaab) maxx = max(maxx, maxi[a][0]);
    if (b != lcaab) maxx = max(maxx, maxi[b][0]);
    return maxx;
}
void add_(int a, int b, int val) {
    int lcaab = lca_(a, b);
    for (int i = 17; i >= 0; i--) {
        if (!is_anc(jump[a][i], lcaab)) {
            tree[a][i] = min(tree[a][i], val);
            a = jump[a][i];
        }

        if (!is_anc(jump[b][i], lcaab)) {
            tree[b][i] = min(tree[b][i], val);
            b = jump[b][i];
        }
    }
    if (a != lcaab) tree[a][0] = min(tree[a][0], val);
    if (b != lcaab) tree[b][0] = min(tree[b][0], val);
}
void f() {
    //input
    int n, licz = 0; cin >> n;
    for (int i = 1; i <= n; i++) {
        string a; cin >> a;
        int b; cin >> b;
        if (a == "TAK") {
            if (licz < 10) cout << i << " ", licz++;
            else if (licz < 20 && b < 2) cout << i << " ", licz++;
        }
    }
    
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    f();
}