#include <bits/stdc++.h>
using namespace std;
int m, pot;
int first[500500], data[500500], mx[500500], val[500500];
bitset<500500> updated;
void sub_update(int node) {
  if (!updated[node]) {
    updated[node] = true;
    first[node] += val[node];
    if (node < pot) {
      updated[2 * node] = updated[2 * node + 1] = false;
      val[2 * node] += val[node];
      val[2 * node + 1] += val[node];
    }
    val[node] = 0;
  }
}
void update(int node, int l, int r, int L, int R, int v) {
  sub_update(node);
  if (R < l || r < L)
    return;
  else if (L <= l && r <= R) {
    updated[node] = false;
    val[node] += v;
    sub_update(node);
  } else {
    update(2 * node, l, (l + r) / 2, L, R, v);
    update(2 * node + 1, (l + r) / 2 + 1, r, L, R, v);
    first[node] = max(first[2 * node], first[2 * node + 1]);
  }
}
int query(int node, int l, int r) {
  sub_update(node);
  if (l == r)
    return l;
  else {
    sub_update(2 * node);
    sub_update(2 * node + 1);
    if (first[2 * node + 1] > 0)
      return query(2 * node + 1, (l + r) / 2 + 1, r);
    else
      return query(2 * node, l, (l + r) / 2);
  }
}
int main() {
  int p, t;
  scanf("%d", &m);
  pot = 1;
  while (pot < m) pot *= 2;
  for (int i = 0; i < int(m); i++) {
    scanf("%d %d", &p, &t);
    p--;
    if (t == 1) scanf("%d", data + p);
    update(1, 0, pot - 1, 0, p, t == 1 ? 1 : -1);
    sub_update(1);
    if (first[1] <= 0)
      printf("-1\n");
    else
      printf("%d\n", data[query(1, 0, pot - 1)]);
  }
}
