#include <bits/stdc++.h>
using namespace std;
const int maxn = 1 << 17;
int MAX[maxn << 1], lazy[maxn << 1], e[maxn];
void push_up(int now) { MAX[now] = max(MAX[now << 1], MAX[now << 1 | 1]); }
void push_down(int now) {
  lazy[now << 1] += lazy[now];
  lazy[now << 1 | 1] += lazy[now];
  MAX[now << 1] += lazy[now];
  MAX[now << 1 | 1] += lazy[now];
  lazy[now] = 0;
}
void update(int now, int p, int L, int R, int l, int r) {
  if (R < l) return;
  if (R >= r) {
    MAX[now] += p;
    lazy[now] += p;
    return;
  }
  if (lazy[now]) push_down(now);
  int mid = (l + r) >> 1;
  update(now << 1, p, L, R, l, mid);
  update(now << 1 | 1, p, L, R, mid + 1, r);
  push_up(now);
}
int query(int now, int l, int r) {
  int mid = (l + r) >> 1;
  if (l == r) return l;
  if (lazy[now]) push_down(now);
  if (MAX[now << 1 | 1] > 0)
    return query(now << 1 | 1, mid + 1, r);
  else
    return query(now << 1, l, mid);
}
int main() {
  int m, pos, op, x;
  scanf("%d", &m);
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &pos, &op);
    if (op == 1) {
      scanf("%d", &x);
      e[pos] = x;
      update(1, 1, 1, pos, 1, m);
    } else {
      update(1, -1, 1, pos, 1, m);
    }
    if (MAX[1] > 0) {
      printf("%d\n", e[query(1, 1, m)]);
    } else
      puts("-1");
  }
  return 0;
}
