#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
int t, n;
bool isc[500010], vis[2000010];
vector<int> g[2000010], ch, b1, b2;
string s;
void read() {
  scanf("%d", &n);
  for (int i = 0; i < n + 5; i++) isc[i] = false;
  for (int i = 0; i < n * 4 + 5; i++) g[i].clear();
  int x, y;
  for (int i = 0; i < n - 1; i++) {
    scanf("%d%d", &x, &y);
    g[x].push_back(y);
    g[y].push_back(x);
  }
  cin >> s;
  for (int i = 0; i < n; i++)
    if (s[i] == 'W') isc[i + 1] = true;
}
bool spj() {
  int nn = n;
  for (int i = 1; i <= nn; i++) {
    if (!isc[i]) continue;
    g[i].push_back(++n);
    int u1 = n;
    g[u1].push_back(i);
    g[u1].push_back(++n);
    g[n].push_back(u1);
    g[u1].push_back(++n);
    g[n].push_back(u1);
  }
  for (int i = 1; i <= n; i++) {
    if (g[i].size() < 3) continue;
    if (g[i].size() > 3) return true;
    int cnt = 0;
    for (int j = 0; j < g[i].size(); j++)
      if (g[g[i][j]].size() > 1) ++cnt;
    if (cnt > 1) return true;
  }
  return false;
}
void dfs(int pos, int ss) {
  ch.push_back(pos);
  vis[pos] = true;
  if ((g[pos].size() == 1 || g[pos].size() > 2) && pos != ss) return;
  for (int i = 0; i < g[pos].size(); i++)
    if (!vis[g[pos][i]]) dfs(g[pos][i], ss);
}
void solve() {
  bool ball = false;
  for (int i = 1; i <= n; i++)
    if (g[i].size() == n - 1) ball = true;
  if (ball) {
    puts("Draw");
    return;
  }
  for (int i = 0; i < n + 5; i++) vis[i] = false;
  bool ok = false;
  ch.clear();
  for (int i = 1; i <= n; i++) {
    if (g[i].size() == 3) {
      ok = true;
      for (int j = 0; j < g[i].size(); j++)
        if (g[g[i][j]].size() == 1) vis[g[i][j]] = true;
      dfs(i, i);
      break;
    }
  }
  if (!ok)
    for (int i = 1; i <= n; i++) {
      if (g[i].size() == 1) {
        dfs(i, i);
        break;
      }
    }
  b1.clear();
  b2.clear();
  for (int i = 0; i < g[ch[0]].size(); i++)
    if (g[g[ch[0]][i]].size() == 1) b1.push_back(g[ch[0]][i]);
  for (int i = 0; i < g[ch.back()].size(); i++)
    if (g[g[ch.back()][i]].size() == 1) b2.push_back(g[ch.back()][i]);
  if (ch.size() == 2) {
    puts("Draw");
    return;
  }
  bool cl = false, cr = false;
  int len = ch.size();
  if (len == 2) {
    puts("Draw");
    return;
  }
  if (len == 3) {
    if (b1.size() > 0 && b2.size() > 0)
      puts("White");
    else
      puts("Draw");
    return;
  }
  if (b1.size() > 0) {
    cl = true;
    --len;
  }
  if (b2.size() > 0) {
    cr = true;
    --len;
  }
  if (len < 3) {
    puts("Draw");
    return;
  }
  if (cl && cr)
    puts(len % 2 == 1 ? "White" : "Draw");
  else
    puts("Draw");
}
int main() {
  cin >> t;
  for (int tn = 0; tn < t; tn++) {
    read();
    if (n < 3) {
      puts("Draw");
      continue;
    }
    if (spj()) {
      puts("White");
      continue;
    }
    solve();
  }
  return 0;
}
