#include <bits/stdc++.h>
const int N = 500005;
int T, to[N << 2], edge, Next[N << 2], last[N], son[N], size[N], n, d[N], x, y,
    fa[N];
char s[N];
int read() {
  char c = getchar();
  int t = 0;
  while (c < '0' || c > '9') c = getchar();
  while (c >= '0' && c <= '9') t = t * 10 + c - '0', c = getchar();
  return t;
}
void add(int x, int y) {
  to[++edge] = y;
  Next[edge] = last[x];
  last[x] = edge;
}
void dfs(int x, int f) {
  size[x] = 1, son[x] = 0;
  fa[x] = f;
  for (int i = last[x]; i; i = Next[i])
    if (to[i] != f) {
      dfs(to[i], x);
      son[x] += (size[to[i]] > 1), size[x] += size[to[i]];
    }
}
void solve() {
  dfs(1, 0);
  int cnt = 0, cnt2 = 0;
  for (int i = 1; i <= n; i++) {
    if (d[i] >= 4) {
      puts("White");
      return;
    }
    if (d[i] == 3 && son[i] + (d[fa[i]] > 1) >= 2) {
      puts("White");
      return;
    }
    if (d[i] == 3) cnt++;
    if (d[i] == 2) cnt2++;
  }
  if (cnt == 2 && cnt2 & 1) {
    puts("White");
    return;
  }
  puts("Draw");
}
int main() {
  T = read();
  while (T--) {
    for (int i = 1; i <= n; i++) last[i] = d[i] = 0;
    n = read();
    edge = 0;
    for (int i = 1; i < n; i++) {
      x = read(), y = read();
      add(x, y);
      add(y, x);
      d[x]++, d[y]++;
    }
    scanf("%s", s + 1);
    if (n < 3) {
      puts("Draw");
      continue;
    }
    int m = n, cnt = 0;
    for (int i = 1; i <= m; i++)
      if (s[i] == 'W') {
        cnt++;
        int t = n + 1;
        add(i, t), add(t, i), d[i]++, d[t]++;
        add(t, n + 2), add(n + 2, t), d[t]++, d[n + 2]++;
        add(t, n + 3), add(n + 3, t), d[t]++, d[n + 3]++;
        n = n + 3;
      }
    if (m == 3) {
      puts(cnt >= 2 ? "White" : "Draw");
      continue;
    }
    if (n == 4 && cnt >= 1) {
      puts("White");
      continue;
    }
    if (n == 4) {
      puts("Draw");
      continue;
    }
    solve();
  }
}
