#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
const int inf = 5e8;
int n, dfn[N], low[N], seq[N], tim, col[N], dep[N], mx[N << 2], mxn[N << 2][2],
    mxl[N << 2][2], mxr[N << 2][2], mnm[N << 2], sub[N];
bool s[N], tag[N << 2];
vector<pair<int, int> > E[N];
void dfs(int u, int ff) {
  seq[dfn[u] = ++tim] = u;
  dep[u] = dep[ff] + 1;
  for (auto e : E[u]) {
    int v = e.first;
    if (v != ff)
      sub[e.second] = v, s[v] = s[u] ^ col[e.second], dfs(v, u), seq[++tim] = u;
  }
  low[u] = tim;
}
void chkmax(int &a, int b) { a = max(a, b); }
void up(int x) {
  mx[x] = mxn[x][0] = mxn[x][1] = mxl[x][0] = mxl[x][1] = mxr[x][0] =
      mxr[x][1] = -inf;
  mnm[x] = min(mnm[(x << 1)], mnm[(x << 1 | 1)]);
  mx[x] = max(mx[(x << 1)], mx[(x << 1 | 1)]);
  for (int i = 0; i < 2; i++) {
    chkmax(mxn[x][i], max(mxn[(x << 1)][i], mxn[(x << 1 | 1)][i]));
    chkmax(mxl[x][i], max(mxl[(x << 1)][i],
                          max(mxl[(x << 1 | 1)][i],
                              mxn[(x << 1 | 1)][i] - 2 * mnm[(x << 1)])));
    chkmax(mxr[x][i], max(mxr[(x << 1)][i],
                          max(mxr[(x << 1 | 1)][i],
                              mxn[(x << 1)][i] - 2 * mnm[(x << 1 | 1)])));
  }
  for (int i = 0; i < 2; i++)
    chkmax(mx[x], max(mxr[(x << 1)][i] + mxn[(x << 1 | 1)][i],
                      mxn[(x << 1)][i] + mxl[(x << 1 | 1)][i]));
}
void mdf(int x) {
  swap(mxn[x][0], mxn[x][1]);
  swap(mxl[x][0], mxl[x][1]);
  swap(mxr[x][0], mxr[x][1]);
  tag[x] ^= 1;
}
void down(int x) {
  if (tag[x]) mdf((x << 1)), mdf((x << 1 | 1)), tag[x] = 0;
}
void build(int x = 1, int l = 1, int r = tim) {
  if (l == r) {
    mnm[x] = dep[seq[l]];
    if (dfn[seq[l]] == l) {
      bool f = s[seq[l]];
      int d = dep[seq[l]];
      mxn[x][f] = d;
      mxl[x][f] = mxr[x][f] = -d;
      mx[x] = 0;
      mxn[x][f ^ 1] = mxl[x][f ^ 1] = mxr[x][f ^ 1] = -inf;
    } else {
      mx[x] = mxn[x][0] = mxn[x][1] = mxl[x][0] = mxl[x][1] = mxr[x][0] =
          mxr[x][1] = -inf;
    }
    return;
  }
  int mid = (l + r) >> 1;
  build((x << 1), l, mid);
  build((x << 1 | 1), mid + 1, r);
  up(x);
}
void modify(int L, int R, int x = 1, int l = 1, int r = tim) {
  if (L <= l && r <= R) return mdf(x);
  down(x);
  int mid = (l + r) >> 1;
  if (L <= mid) modify(L, R, (x << 1), l, mid);
  if (R > mid) modify(L, R, (x << 1 | 1), mid + 1, r);
  up(x);
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  for (int i = 1, u, v; i < n; i++) {
    cin >> u >> v >> col[i];
    E[u].push_back(make_pair(v, i));
    E[v].push_back(make_pair(u, i));
  }
  dfs(1, 0);
  build();
  int m;
  cin >> m;
  while (m--) {
    int id;
    cin >> id;
    int u = sub[id];
    modify(dfn[u], low[u]);
    cout << mx[1] << '\n';
  }
  return 0;
}
