#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2 * 1e5;
int N, A[MAXN];
struct STN {
  int idx, val;
  void merge(STN& L, STN& R) {
    if (R.val >= L.val)
      val = R.val, idx = R.idx;
    else
      val = L.val, idx = L.idx;
  }
};
STN ST[4 * MAXN];
int lazy[4 * MAXN];
void STB(int id = 1, int l = 0, int r = N) {
  if (r - l < 2) {
    ST[id].idx = l;
    ST[id].val = 0;
    return;
  }
  int M = (l + r) >> 1, L = id << 1, R = L | 1;
  STB(L, l, M);
  STB(R, M, r);
  ST[id].merge(ST[L], ST[R]);
}
void upd(int id, int l, int r, int x) {
  lazy[id] += x;
  ST[id].val += x;
}
void shift(int id, int l, int r) {
  int M = (l + r) >> 1, L = id << 1, R = L | 1;
  upd(L, l, M, lazy[id]);
  upd(R, M, r, lazy[id]);
  lazy[id] = 0;
}
void STU(int x, int y, int v, int id = 1, int l = 0, int r = N) {
  if (x >= r || l >= y) return;
  if (x <= l && r <= y) {
    upd(id, l, r, v);
    return;
  }
  shift(id, l, r);
  int M = (l + r) >> 1, L = id << 1, R = L | 1;
  STU(x, y, v, L, l, M);
  STU(x, y, v, R, M, r);
  ST[id].merge(ST[L], ST[R]);
}
STN STQ(int x, int y, int id = 1, int l = 0, int r = N) {
  if (x == l && y == r) return ST[id];
  shift(id, l, r);
  int M = (l + r) >> 1, L = id << 1, R = L | 1;
  if (x >= M) return STQ(x, y, R, M, r);
  if (y <= M) return STQ(x, y, L, l, M);
  STN res, ln = STQ(x, M, L, l, M), rn = STQ(M, y, R, M, r);
  return res.merge(ln, rn), res;
}
int main() {
  scanf("%d", &N);
  STB();
  for (int i = 0; i < (int)N; i++) {
    int p, t;
    scanf("%d", &p), scanf("%d", &t);
    if (t == 0) STU(0, p, -1);
    if (t == 1) {
      int x;
      scanf("%d", &x);
      A[p - 1] = x;
      STU(0, p, +1);
    }
    int lo = 0, hi = N - 1, med;
    while (lo < hi) {
      med = (lo + hi + 1) / 2;
      STN ans = STQ(med, N);
      if (ans.val > 0)
        lo = med;
      else
        hi = med - 1;
    }
    STN ans = STQ(lo, N);
    printf("%d\n", ans.val > 0 ? A[lo] : -1);
  }
}
