#include <bits/stdc++.h>
using namespace std;
long long v[400005], sum[20][400005];
int fa[20][400005], cnt = 1;
void add(int r, long long w) {
  v[++cnt] = w;
  if (v[r] >= v[cnt])
    fa[0][cnt] = r;
  else {
    for (int i = 19; i >= 0; i--)
      if (v[fa[i][r]] < v[cnt]) r = fa[i][r];
    fa[0][cnt] = fa[0][r];
  }
  if (!fa[0][cnt])
    sum[0][cnt] = 1e16;
  else
    sum[0][cnt] = v[fa[0][cnt]];
  for (int i = 1; i < 20; i++) {
    fa[i][cnt] = fa[i - 1][fa[i - 1][cnt]];
    if (!fa[i][cnt])
      sum[i][cnt] = 1e16;
    else
      sum[i][cnt] = sum[i - 1][fa[i - 1][cnt]] + sum[i - 1][cnt];
  }
}
int query(int r, long long w) {
  if (v[r] > w) return 0;
  w -= v[r];
  int ans = 1;
  for (int i = 19; i >= 0; i--)
    if (w >= sum[i][r]) {
      w -= sum[i][r];
      r = fa[i][r];
      ans += (1 << i);
    }
  return ans;
}
int main() {
  int Q, f;
  long long r, w, p, q, last = 0;
  v[0] = 1e16;
  for (int i = 0; i < 20; i++) sum[i][1] = 1e16;
  scanf("%d", &Q);
  while (Q--) {
    scanf("%d%lld%lld", &f, &p, &q);
    r = p ^ last, w = q ^ last;
    if (f == 1)
      add(r, w);
    else
      printf("%d\n", last = query(r, w));
  }
  return 0;
}
