The tic-tac-toe game is starting on a tree of n vertices. Some vertices are already colored in white while the remaining are uncolored.

There are two players — white and black. The players make moves alternatively. The white player starts the game. In his turn, a player must select one uncolored vertex and paint it in his color.

The player wins if he paints some path of three vertices in his color. In case all vertices are colored and neither player won, the game ends in a draw.

Could you please find who will win the game or whether it ends as a draw, assuming both players play optimally? 

Input

The first line contains a single integer T (1 ≤ T ≤ 50 000) — the number of test cases. Then descriptions of T test cases follow.

The first line of each test contains a single integer n (1 ≤ n ≤ 5 ⋅ 10^5) — the number of vertices in the tree.

Each of the following n - 1 lines contains integers v, u (1 ≤ v, u ≤ n) denoting an edge of the tree connecting vertices v and u.

The last line of a test case contains a string of letters 'W' (for white) and 'N' (for not colored) of length n denoting already colored vertices. Vertexes already colored in white are denoted as 'W'.

It's guaranteed that the given edges form a tree, that there is at least one uncolored vertex and that there is no path of three white vertices.

It's guaranteed that sum of all n among all test cases is at most 5 ⋅ 10^5.

Output

For every test case, print either "White", "Draw" or "Black", depending on the result of the game.

Example

Input


2
4
1 2
1 3
1 4
NNNW
5
1 2
2 3
3 4
4 5
NNNNN


Output


White
Draw

Note

In the first example, vertex 4 is already colored in white. The white player can win by coloring the vertex 1 in white first and the remaining vertex on his second turn. The process is illustrated with the pictures below.

<image>

In the second example, we can show that no player can enforce their victory.
#include <bits/stdc++.h>
using namespace std;
void read(int &a) {
  char c = getchar();
  while (c < '0' || c > '9') {
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    a = (a << 1) + (a << 3) + (c ^ 48);
    c = getchar();
  }
}
const int Maxn = 1000000;
int head[Maxn + 5], arrive[Maxn << 1 | 5], nxt[Maxn << 1 | 5], tot;
int deg[Maxn + 5];
void add_edge(int from, int to) {
  arrive[++tot] = to;
  nxt[tot] = head[from];
  head[from] = tot;
  deg[from]++;
}
int n;
char s[Maxn + 5];
void init() {
  tot = 0;
  for (int i = 1; i <= n; i++) {
    head[i] = deg[i] = 0;
  }
}
int main() {
  int T;
  scanf("%d", &T);
  while (T--) {
    scanf("%d", &n);
    init();
    for (int i = 1; i < n; i++) {
      int u, v;
      scanf("%d%d", &u, &v);
      add_edge(u, v);
      add_edge(v, u);
    }
    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');
      }
      if (cnt >= 2) {
        puts("White");
      } else {
        puts("Draw");
      }
      continue;
    }
    bool flag = 0;
    int tmp_n = n;
    for (int i = 1; i <= tmp_n; i++) {
      if (s[i] == 'W') {
        n++;
        head[n] = 0;
        add_edge(i, n);
        add_edge(n, i);
        deg[n] = 3;
      }
    }
    int sum = 0;
    for (int i = 1; i <= n && (!flag); i++) {
      if (deg[i] > 3) {
        flag = 1;
      } else if (deg[i] == 3) {
        int num = 0;
        for (int j = head[i]; j; j = nxt[j]) {
          int v = arrive[j];
          if (deg[v] >= 2) {
            num++;
          }
        }
        if (num >= 2) {
          flag = 1;
        }
        sum++;
      }
    }
    if (sum >= 2 && (n & 1)) {
      flag = 1;
    }
    if (flag) {
      puts("White");
    } else {
      puts("Draw");
    }
  }
  return 0;
}
