#include <bits/stdc++.h>
using namespace std;

unordered_map<int,vector<int>> Map;
int SetAllValue = 0,SetAllTime = -1,cnt = 0; 
void put(int k,int v){
    if(Map.find(k) != Map.end()){
        Map[k][0] = v;
        Map[k][1] = cnt++;
    }else{
        Map[k] = {v,cnt++};
    }
}
void setAll(int v){
    SetAllValue = v;
    SetAllTime = cnt++;
}
int get(int k){
    if(Map.find(k) == Map.end()){
        return -1;
    }
    vector<int>& value = Map[k];
    if(value[1] > SetAllTime){
        return value[0];
    }else{
        return SetAllValue;
    }
}
int main() {
    int N,opt,x,y;
    Map.clear();

    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    while(cin >> N){
        for(int i = 0; i < N; i++){
            cin >> opt;
            if(opt == 1){
                cin >> x >> y;
                put(x,y);
            }else if(opt == 2){
                cin >> x;
                cout << get(x) << endl;
            }else{
                cin >> x;
                setAll(x);
            }
        }
    }
    return 0;
}