#include <bits/stdc++.h>
using namespace std;
struct Edge {
  int to, nxt, dis;
} e[1000005];
int n, m, num, x = 1, y = 1, tim, h[500005], dep[500005], q[500005];
int dfn[500005], out[500005], ans[500005], dis[500005];
int p[500005], mx[2][2000005], U[500005], V[500005], lazy[2000005];
void cmax(int &a, int b) { a = max(a, b); }
void add(int u, int v, int d) {
  e[++num].to = v;
  e[num].dis = d;
  e[num].nxt = h[u];
  h[u] = num;
}
void dfs(int u, int fa) {
  int v, i;
  dep[u] = dep[fa] + 1;
  for (i = h[u]; i; i = e[i].nxt) {
    v = e[i].to;
    if (v != fa) dfs(v, u);
  }
}
void dfs2(int u, int fa) {
  int v, i;
  dfn[u] = ++tim;
  dep[u] = dep[fa] + 1;
  for (i = h[u]; i; i = e[i].nxt) {
    v = e[i].to;
    if (v != fa) {
      dis[v] = (dis[u] + e[i].dis) & 1;
      dfs2(v, u);
    }
  }
  out[u] = tim;
}
void push_up(int ind) {
  mx[0][ind] = max(mx[0][ind << 1], mx[0][ind << 1 | 1]);
  mx[1][ind] = max(mx[1][ind << 1], mx[1][ind << 1 | 1]);
}
void push_down(int ind) {
  if (lazy[ind]) {
    lazy[ind << 1] = !lazy[ind << 1];
    lazy[ind << 1 | 1] = !lazy[ind << 1 | 1];
    swap(mx[0][ind << 1], mx[1][ind << 1]);
    swap(mx[0][ind << 1 | 1], mx[1][ind << 1 | 1]);
    lazy[ind] = 0;
  }
}
void build(int ind, int L, int R) {
  if (L == R) {
    mx[dis[p[L]]][ind] = dep[p[L]];
    return;
  }
  int mid = (L + R) >> 1;
  build(ind << 1, L, mid);
  build(ind << 1 | 1, mid + 1, R);
  push_up(ind);
}
void upd(int ind, int L, int R, int l, int r) {
  if (l <= L && R <= r) {
    lazy[ind] = !lazy[ind];
    swap(mx[0][ind], mx[1][ind]);
    return;
  }
  push_down(ind);
  int mid = (L + R) >> 1;
  if (l <= mid) upd(ind << 1, L, mid, l, r);
  if (r > mid) upd(ind << 1 | 1, mid + 1, R, l, r);
  push_up(ind);
}
void solve(int r) {
  int i, t;
  tim = 0;
  dis[r] = 0;
  memset(mx, 0, sizeof(mx));
  memset(lazy, 0, sizeof(lazy));
  dfs2(r, 0);
  for (i = 1; i <= n; i++) p[dfn[i]] = i;
  build(1, 1, n);
  for (i = 1; i <= m; i++) {
    t = dep[V[q[i]]] > dep[U[q[i]]] ? V[q[i]] : U[q[i]];
    upd(1, 1, n, dfn[t], out[t]);
    cmax(ans[i], mx[0][1] - 1);
  }
}
int main() {
  ios::sync_with_stdio(false);
  int i, d;
  cin >> n;
  for (i = 1; i <= n - 1; i++) {
    cin >> U[i] >> V[i] >> d;
    add(U[i], V[i], d);
    add(V[i], U[i], d);
  }
  dfs(1, 0);
  for (i = 1; i <= n; i++)
    if (dep[i] > dep[x]) x = i;
  dfs(x, 0);
  for (i = 1; i <= n; i++)
    if (dep[i] > dep[y]) y = i;
  cin >> m;
  for (i = 1; i <= m; i++) cin >> q[i];
  solve(x);
  solve(y);
  for (i = 1; i <= m; i++) cout << ans[i] << endl;
  return 0;
}
