#include <bits/stdc++.h>
using namespace std;
template <typename T>
void read(T& x) {
  x = 0;
  int f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + ch - 48;
    ch = getchar();
  }
  x *= f;
}
template <typename T, typename... Args>
void read(T& x, Args&... args) {
  read(x), read(args...);
}
const int maxn = 2000500;
vector<int> G[maxn], special;
int n, _x, _y, d[maxn], sz[maxn];
char s[maxn];
inline void link(int u, int v) {
  G[u].push_back(v);
  G[v].push_back(u);
}
inline void extend(int x) {
  link(x, ++n);
  link(n, n + 1);
  link(n, n + 2);
  n += 2;
}
void dfs(int v, int dist, int fa) {
  d[v] = dist, sz[v] = 1;
  for (auto g : G[v]) {
    if (g == fa) continue;
    dfs(g, dist + 1, v);
    sz[v] += sz[g];
  }
}
void solve() {
  for (int i = 1; i <= n + 10; ++i) G[i].clear();
  special.clear();
  read(n);
  for (int i = 1; i < n; ++i) {
    read(_x), read(_y);
    link(_x, _y);
  }
  scanf("%s", s + 1);
  for (int i = 1; i <= n; ++i)
    if (s[i] == 'W') extend(i);
  for (int i = 1; i <= n; ++i) {
    if (G[i].size() >= 4) {
      puts("White");
      return;
    } else if (G[i].size() == 3)
      special.push_back(i);
  }
  if (special.size() > 2) {
    puts("White");
    return;
  } else if (special.size() == 2) {
    dfs(special[0], 0, -1);
    if ((d[special[1]] & 1) == 0) {
      puts("White");
      return;
    }
  }
  for (auto g : special) {
    dfs(g, 0, -1);
    int cnt = 0;
    for (auto u : G[g]) {
      cnt += (sz[u] > 1);
    }
    if (cnt >= 2) {
      puts("White");
      return;
    }
  }
  puts("Draw");
}
int main() {
  int T;
  read(T);
  while (T--) solve();
  return 0;
}
