#include <bits/stdc++.h>
using namespace std;
const int mo = 1e9 + 7;
template <class T>
void rd(T &x) {
  x = 0;
  int f = 0;
  char c = getchar();
  while (c > '9' || c < '0') {
    if (c == '-') f = 1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = x * 10 + c - '0';
    c = getchar();
  }
  if (f) x = -x;
}
int n;
int cnt, al[500005 << 1], bl[500005 << 1], cl[500005 << 1], kk[500005];
int su1[2][500005 << 2], su0[2][500005 << 2], ss[2][500005 << 2];
int cs[500005], se[500005];
int df, dfn[500005], dnf[500005], dpf[500005];
int qe[500005], voa[500005];
int Q, P, V, F;
int Mx(int x, int y) { return x > y ? x : y; }
void jia(int x, int y, int z) {
  al[++cnt] = y;
  bl[cnt] = z;
  cl[cnt] = kk[x];
  kk[x] = cnt;
}
int bfs(int u) {
  int q = 0, p = 0;
  qe[p++] = u;
  for (int i = 1; i <= n; ++i) voa[i] = 0;
  voa[u] = 1;
  while (q < p) {
    u = qe[q++];
    for (int i = kk[u]; i; i = cl[i])
      if (!voa[al[i]]) qe[p++] = al[i], voa[al[i]] = 1;
  }
  return qe[p - 1];
}
void dfs(int x, int y) {
  dfn[x] = ++df;
  dpf[df] = x;
  for (int i = kk[x]; i; i = cl[i])
    if (al[i] != y) {
      dfs(al[i], x);
    }
  dnf[x] = df;
}
void dfs1(int x, int y) {
  for (int i = kk[x]; i; i = cl[i])
    if (al[i] != y) {
      cs[al[i]] = cs[x] ^ bl[i];
      se[al[i]] = se[x] + 1;
      dfs1(al[i], x);
    }
}
void pushd(int bao) {
  int l = bao << 1, r = bao << 1 | 1;
  ss[F][l] ^= 1;
  ss[F][r] ^= 1;
  swap(su0[F][l], su1[F][l]);
  swap(su0[F][r], su1[F][r]);
  ss[F][bao] = 0;
}
void pushup(int bao) {
  su1[F][bao] = Mx(su1[F][bao << 1], su1[F][bao << 1 | 1]);
  su0[F][bao] = Mx(su0[F][bao << 1], su0[F][bao << 1 | 1]);
}
void init(int l, int r, int bao) {
  if (l == r) {
    if (cs[dpf[l]])
      su1[F][bao] = se[dpf[l]];
    else
      su0[F][bao] = se[dpf[l]];
    return;
  }
  int mid = l + r >> 1;
  init(l, mid, bao << 1);
  init(mid + 1, r, bao << 1 | 1);
  pushup(bao);
}
void cg(int l, int r, int bao) {
  if (Q <= l && P >= r) {
    ss[F][bao] ^= 1;
    swap(su0[F][bao], su1[F][bao]);
    return;
  }
  if (ss[F][bao]) pushd(bao);
  int mid = l + r >> 1;
  if (Q <= mid) cg(l, mid, bao << 1);
  if (P > mid) cg(mid + 1, r, bao << 1 | 1);
  pushup(bao);
}
int main() {
  int q, x, y, z, u, v;
  rd(n);
  for (int i = 1; i < n; ++i) {
    rd(x);
    rd(y);
    rd(z);
    jia(x, y, z);
    jia(y, x, z);
  }
  u = bfs(1);
  v = bfs(u);
  dfs(u, 0);
  F = 0;
  cs[u] = 0;
  se[u] = 0;
  dfs1(u, 0);
  init(1, n, 1);
  F = 1;
  cs[v] = 0;
  se[v] = 0;
  dfs1(v, 0);
  init(1, n, 1);
  rd(q);
  while (q--) {
    rd(x);
    y = al[x << 1];
    z = al[(x << 1) - 1];
    if (dfn[y] < dfn[z]) y = z;
    F = 0;
    Q = dfn[y];
    P = dnf[y];
    cg(1, n, 1);
    F = 1;
    if (dfn[v] <= dnf[y] && dfn[v] >= dfn[y]) {
      Q = 1;
      P = dfn[y] - 1;
      if (Q <= P) cg(1, n, 1);
      Q = dnf[y] + 1;
      P = n;
      if (Q <= P) cg(1, n, 1);
    } else
      cg(1, n, 1);
    printf("%d\n", Mx(su0[0][1], su0[1][1]));
  }
  return 0;
}
