#include <bits/stdc++.h>
using namespace std;
const int NMAX = 5e5 + 10;
vector<int> adia[NMAX];
bool alb[NMAX];
bool castiga_alb;
int dfs(int nod, int tata) {
  if (adia[nod].size() == 1) return 1 + alb[nod];
  if (adia[nod].size() == 2)
    return dfs(adia[nod][0] + adia[nod][1] - tata, nod);
  int a = 0, b = 0;
  for (auto i : adia[nod])
    if (i != tata) b = a, a = dfs(i, nod);
  castiga_alb |= (a == 2 || b == 2);
  return 0;
}
void test() {
  castiga_alb = 0;
  int n, a, b;
  cin >> n;
  int has_white = 0;
  for (int i = 1; i < n; i++) {
    cin >> a >> b;
    adia[a].push_back(b);
    adia[b].push_back(a);
  }
  for (int i = 1; i <= n; i++) {
    char c;
    cin >> c;
    alb[i] = (c == 'W');
    has_white += (c == 'W');
  }
  if (n < 3) {
    cout << "Draw\n";
    for (int i = 1; i <= n; i++) adia[i].clear();
    return;
  }
  for (int i = 1; i <= n; i++) {
    if (adia[i].size() == n - 1) {
      castiga_alb |= (n + has_white >= 5);
      cout << (castiga_alb ? "White\n" : "Draw\n");
      for (int i = 1; i <= n; i++) adia[i].clear();
      return;
    }
  }
  for (int i = 1; i <= n; i++)
    castiga_alb |= (adia[i].size() >= 4 || (alb[i] && adia[i].size() >= 2));
  for (int i = 1; i <= n; i++) {
    int vec_grei = 0;
    for (auto j : adia[i]) vec_grei += (adia[j].size() > 1);
    castiga_alb |= (adia[i].size() >= 3 && vec_grei >= 2);
  }
  int r1 = 0, r2 = 0;
  for (int i = 1; i <= n; i++)
    for (auto j : adia[i])
      if (adia[i].size() >= 2 && adia[j].size() >= 2) r1 = i, r2 = j;
  if (!castiga_alb) {
    auto x = dfs(r1, r2);
    auto y = dfs(r2, r1);
    if (x + y == 4) castiga_alb |= (n & 1);
    castiga_alb |= (x + y == 0 && (n & 1));
    castiga_alb |= (n % 2 == 0 && x + y == 2 && x * x + y * y == 4);
  }
  cout << (castiga_alb ? "White\n" : "Draw\n");
  for (int i = 1; i <= n; i++) adia[i].clear();
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int q;
  cin >> q;
  while (q--) test();
  return 0;
}
