func_code_string: #include <bits/stdc++.h>   using namespace std;   #pragma GCC optimize( O3 )   int t, h[2000010], v[2000010 * 2], nxt[2000010 * 2], ec, in[2000010], n, a, b;   char s[2000010];   void add(int x, int y) {     v[++ec] = y;     in[y]++;     nxt[ec] = h[x];     h[x] = ec;   }   void adj(int x, int y) {     add(x, y);     add(y, x);   }   int main() {     scanf( %d , &t);     while (t--) {       scanf( %d , &n);       ec = 0;       memset(h, 0, sizeof(int) * (n + 5));       memset(in, 0, sizeof(int) * (n + 5));       for (int i = 1; i < n; i++) {         scanf( %d%d , &a, &b);         adj(a, b);       }       scanf( %s , s + 1);       if (n < 3) {         printf( Draw n );         continue;       }       if (n == 3) {         int c = 0;         for (int i = 1; i <= n; i++)           if (s[i] ==  W ) c++;         if (c >= 2)           printf( White n );         else           printf( Draw n );         continue;       }       int ct = 0, r = 0, on = n;       for (int i = 1; i <= on; i++)         if (s[i] ==  W ) {           add(i, ++n);           h[n] = 0;           add(n, i);           in[n] = 3;         }       for (int i = 1; i <= n; i++) {         if (in[i] > 3)           r = 1;         else if (in[i] == 3) {           ct++;           int cc = 0;           for (int j = h[i]; j; j = nxt[j])             if (in[v[j]] >= 2) cc++;           r |= cc >= 2;         }       }       if (ct == 2 && (n & 1)) r = 1;       printf(r ?  White n  :  Draw n );     }   }   