#include <bits/stdc++.h>
using namespace std;
int T, n, nodecnt;
vector<int> v[2000010];
void addedge(int s, int e) {
  v[s].push_back(e);
  v[e].push_back(s);
}
char s[500010];
int d;
void dfs(int np, int fath, int dep) {
  if (fath && v[np].size() == 3) {
    d = dep;
    return;
  }
  for (int &x : v[np]) {
    if (x == fath) continue;
    dfs(x, np, dep + 1);
  }
}
void solve() {
  scanf("%d", &n);
  nodecnt = n;
  for (int i = 1; i <= (n << 2); i++) v[i].clear();
  for (int i = 1, ti, tj; i < n; i++) {
    scanf("%d%d", &ti, &tj);
    addedge(ti, tj);
  }
  scanf("%s", s + 1);
  for (int i = 1; i <= n; i++) {
    if (s[i] == 'W') {
      int p = ++nodecnt;
      addedge(i, p);
      addedge(p, ++nodecnt);
      addedge(p, ++nodecnt);
    }
  }
  int c3 = 0;
  for (int i = 1; i <= nodecnt; i++) {
    if (v[i].size() >= 4) {
      puts("White");
      return;
    }
    if (v[i].size() == 3) c3++;
  }
  if (c3 >= 3) {
    puts("White");
    return;
  }
  for (int i = 1; i <= nodecnt; i++) {
    if (v[i].size() == 3) {
      int c2 = 0;
      for (int &x : v[i]) c2 += (v[x].size() >= 2);
      if (c2 >= 2) {
        puts("White");
        return;
      }
    }
  }
  if (c3 == 2) {
    for (int i = 1; i <= nodecnt; i++) {
      if (v[i].size() == 3) {
        dfs(i, 0, 0);
        if (d & 1)
          puts("Draw");
        else
          puts("White");
        return;
      }
    }
  }
  puts("Draw");
}
int main() {
  scanf("%d", &T);
  while (T--) solve();
  return 0;
}
