#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O2")
using ll=long long;
using ull=unsigned long long;
#define fn "SUGGEST"
#define nl '\n'
#define rs resize
#define kt size
#define F first
#define S second
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
unordered_map<string,int> mp;
vector<string> a;
int q;
struct query {
    int tp;
    string s;
    int x;
};
vector<query> Q;
bool ktra(string t, string s) {
    if (t.kt()>s.kt()) return false;
    for (int i=0;i<(int)t.kt();i++) {
        if (t[i]!=s[i]) return false;
    }
    return true;
}
void sub1() {
    for (auto z:Q) {
        if (z.tp==1) {
            a.push_back(z.s);
            mp[z.s]=z.x;
        }
        else {
            int mx=-1;
            string ans="-1";
            for (string v:a) {
                if (ktra(z.s,v)) {
                    if (mp[v]>mx) {
                        mx=mp[v];
                        ans=v;
                    }
                    else if (mp[v]==mx) {
                        ans=min(ans,v);
                    }
                }
            }
            cout << ans << nl;
        }
    }
}

void sub2() {
    int mx[26];
    string ans[26];
    fill(mx,mx+26,-1);
    for (auto z:Q) {
        if (z.tp==1) {
            string s=z.s;
            int x=z.x;
            int c=s[0]-'a';
            if (x>mx[c] ||
               (x==mx[c] && (ans[c]=="" || s<ans[c]))) {
                mx[c]=x;
                ans[c]=s;
            }
        }
        else {
            int c=z.s[0]-'a';
            if (ans[c]=="") cout << -1 << nl;
            else cout << ans[c] << nl;
        }
    }
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    if (FILE *f=fopen(fn".INP","r")) {
        fclose(f);
        freopen(fn".INP","r",stdin);
        freopen(fn".OUT","w",stdout);
    }
    cin >> q;
    bool ok2=true;
    for (int i=1;i<=q;i++) {
        int tp;
        cin >> tp;
        if (tp==1) {
            string s;
            int x;
            cin >> s >> x;
            Q.push_back({tp,s,x});
        }
        else {
            string p;
            cin >> p;
            if (p.kt()!=1) ok2=false;
            Q.push_back({tp,p,0});
        }
    }
    if (ok2) sub2();
    else sub1();
    return 0;
}
