#include <bits/stdc++.h>
using namespace std;
const int N = 100001;
int n, v[N], seg[4 * N], lazy[4 * N], t, p, x;
void checkLazy(int p, int s, int e) {
  if (lazy[p] != 0) {
    seg[p] += lazy[p];
    if (s != e) {
      lazy[2 * p] += lazy[p];
      lazy[2 * p + 1] += lazy[p];
    }
  }
  lazy[p] = 0;
}
void update(int p, int s, int e, int a, int b, int v) {
  checkLazy(p, s, e);
  if (s >= a && e <= b) {
    seg[p] += v;
    if (s != e) {
      lazy[2 * p] += v;
      lazy[2 * p + 1] += v;
    }
    return;
  }
  if (s > b || e < a) return;
  update(2 * p, s, (s + e) / 2, a, b, v);
  update(2 * p + 1, (s + e) / 2 + 1, e, a, b, v);
  seg[p] = max(seg[2 * p], seg[2 * p + 1]);
}
int get(int p, int s, int e) {
  checkLazy(p, s, e);
  if (seg[p] <= 0) return -1e9;
  if (s == e) return s;
  checkLazy(2 * p + 1, (s + e) / 2 + 1, e);
  if (seg[2 * p + 1] <= 0) return get(2 * p, s, (s + e) / 2);
  return get(2 * p + 1, (s + e) / 2 + 1, e);
}
int get(int p, int s, int e, int i) {
  checkLazy(p, s, e);
  if (s == e) return seg[p];
  if (i <= (s + e) / 2) return get(2 * p, s, (s + e) / 2, i);
  return get(2 * p + 1, (s + e) / 2 + 1, e, i);
}
int main() {
  std::ios::sync_with_stdio(false);
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d%d", &p, &t);
    p--;
    if (t == 0) {
      update(1, 0, n - 1, 0, p, -1);
    } else {
      scanf("%d", &x);
      v[p] = x;
      update(1, 0, n - 1, 0, p, 1);
    }
    int cur = get(1, 0, n - 1);
    if (cur < 0)
      cur = -1;
    else
      cur = v[cur];
    printf("%d\n", cur);
  }
  return 0;
}
