#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e5 + 5;
int N, tin[maxn], tout[maxn], depth[maxn];
vector<pair<int, int> > adj[maxn];
int change[maxn];
int U[maxn], V[maxn];
int res[maxn];
int Q;
array<int, 2> tr[4 * maxn];
int lazy[4 * maxn];
int nTime = 0;
int pos[maxn];
int stone[maxn];
void prep(int u, int p = -1) {
  tin[u] = ++nTime;
  pos[nTime] = u;
  for (auto& v : adj[u]) {
    if (v.first != p) {
      stone[v.first] = stone[u] + v.second;
      depth[v.first] = depth[u] + 1;
      prep(v.first, u);
    }
  }
  tout[u] = nTime;
}
void apply(int id, int l, int r) {
  if (!lazy[id]) return;
  swap(tr[id][0], tr[id][1]);
  if (l != r) {
    lazy[id << 1] ^= lazy[id];
    lazy[id << 1 | 1] ^= lazy[id];
  }
  lazy[id] = 0;
}
void add(int id) {
  for (int i = 0; i < 2; ++i)
    tr[id][i] = max(tr[id << 1][i], tr[id << 1 | 1][i]);
}
void build(int id, int l, int r) {
  lazy[id] = 0;
  if (l == r) {
    tr[id][0] = tr[id][1] = 0;
    tr[id][stone[pos[l]] % 2] = depth[pos[l]];
    return;
  }
  int mid = (l + r) / 2;
  build(id << 1, l, mid);
  build(id << 1 | 1, mid + 1, r);
  add(id);
}
void flip(int L, int R, int id = 1, int l = 1, int r = N) {
  apply(id, l, r);
  if (R < l || r < L) return;
  if (L <= l && r <= R) {
    lazy[id] ^= 1;
    apply(id, l, r);
    return;
  }
  int mid = (l + r) / 2;
  flip(L, R, id << 1, l, mid);
  flip(L, R, id << 1 | 1, mid + 1, r);
  add(id);
}
void solve(int root) {
  nTime = 0;
  stone[root] = depth[root] = 0;
  prep(root);
  build(1, 1, N);
  for (int i = 1; i <= Q; ++i) {
    int id = change[i];
    int u = U[id], v = V[id];
    if (depth[u] < depth[v]) swap(u, v);
    flip(tin[u], tout[u]);
    apply(1, 1, N);
    res[i] = max(res[i], tr[1][0]);
  }
}
signed main(void) {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> N;
  for (int i = 1; i < N; ++i) {
    int u, v, c;
    cin >> u >> v >> c;
    adj[u].emplace_back(v, c);
    adj[v].emplace_back(u, c);
    U[i] = u;
    V[i] = v;
  }
  cin >> Q;
  for (int i = 1; i <= Q; ++i) {
    cin >> change[i];
  }
  function<void(int, int)> dfs = [&](int u, int p) {
    for (auto& v : adj[u]) {
      if (v.first != p) {
        depth[v.first] = depth[u] + 1;
        dfs(v.first, u);
      }
    }
  };
  int r1, r2;
  auto Diamater = [&](void) {
    depth[1] = 0;
    dfs(1, -1);
    r1 = -1;
    for (int i = 1; i <= N; ++i) {
      if (r1 == -1 || depth[i] > depth[r1]) r1 = i;
    }
    depth[r1] = 0;
    dfs(r1, -1);
    r2 = -1;
    for (int i = 1; i <= N; ++i) {
      if (r2 == -1 || depth[i] > depth[r2]) {
        r2 = i;
      }
    }
  };
  Diamater();
  solve(r1);
  solve(r2);
  for (int i = 1; i <= Q; ++i) cout << res[i] << '\n';
}
