#include <bits/stdc++.h>
using namespace std;
const int N = 400000;
int T, o;
long long p, q, lst;
long long w[N + 10];
int f[N + 10][25], mx[N + 10][25];
int tot, nxt[N + 10][25];
long long sum[N + 10][25];
int find_nxt(int p) {
  long long v = w[p];
  for (int i = 20; i >= 0; i--) {
    if (mx[p][i] < v) p = f[p][i];
  }
  return f[p][0];
}
int check(int p, long long lim) {
  if (w[p] > lim) return 0;
  long long t = w[p];
  int re = 1;
  for (int i = 20; i >= 0; i--) {
    if (!nxt[p][i]) continue;
    if (t + sum[p][i] <= lim) {
      t += sum[p][i];
      p = nxt[p][i];
      re += (1 << i);
    }
  }
  return re;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> T;
  tot = 1;
  while (T--) {
    cin >> o >> p >> q;
    p ^= lst;
    q ^= lst;
    if (o == 1) {
      tot++;
      f[tot][0] = p;
      mx[tot][0] = w[p];
      w[tot] = q;
      for (int i = 1; i <= 20; i++) {
        f[tot][i] = f[f[tot][i - 1]][i - 1];
        mx[tot][i] = max(mx[tot][i - 1], mx[f[tot][i - 1]][i - 1]);
      }
      nxt[tot][0] = find_nxt(tot);
      sum[tot][0] = w[nxt[tot][0]];
      for (int i = 1; i <= 20; i++) {
        nxt[tot][i] = nxt[nxt[tot][i - 1]][i - 1];
        sum[tot][i] = sum[tot][i - 1] + sum[nxt[tot][i - 1]][i - 1];
      }
    } else {
      lst = check(p, q);
      cout << lst << '\n';
    }
  }
  getchar();
  getchar();
  return 0;
}
