#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0;
  int f = 1;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') f = -1;
  for (; isdigit(ch); ch = getchar()) x = x * 10 + (ch ^ 48);
  return x * f;
}
void print(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) print(x / 10);
  putchar(x % 10 + '0');
}
const int N = 1000010, M = N;
int n, d[N];
char s[N];
;
struct edge {
  int nxt, to, w;
} e[M << 1];
int head[N], cnt = 1 ^ 1;
void add(int u, int v, int w = 0) {
  e[++cnt].w = w, e[cnt].to = v, e[cnt].nxt = head[u];
  head[u] = cnt;
}
void add_edge(int u, int v, int w = 0) { add(u, v, w), add(v, u, w * 1); };
int main() {
  int T = read();
  while (T--) {
    n = read();
    for (int i = 1; i <= 2 * n; i++) head[i] = d[i] = 0;
    cnt = 0;
    for (int i = 1; i < n; i++) {
      int u = read(), v = read();
      d[u]++, d[v]++, add_edge(u, v);
    }
    scanf("%s", s + 1);
    if (n < 3) {
      puts("Draw");
      continue;
    }
    if (n == 3) {
      int cnt = 0;
      for (int i = 1; i <= n; i++) cnt += (s[i] == 'W');
      puts(cnt >= 2 ? "White" : "Draw");
      continue;
    }
    bool fl = 0;
    int cnt = 0;
    for (int i = 1; i <= n; i++)
      if (s[i] == 'W') d[i]++, add_edge(i, ++n), d[n] = 3, head[n] = 0;
    for (int i = 1; !fl && i <= n; i++)
      if (d[i] > 3)
        fl = 1;
      else if (d[i] == 3) {
        int tot = 0;
        for (int j = head[i]; j; j = e[j].nxt) tot += (d[e[j].to] >= 2);
        fl |= (tot >= 2);
        ++cnt;
      }
    if (cnt == 2 && (n & 1)) fl = 1;
    puts(fl ? "White" : "Draw");
  }
  return 0;
}
