func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<int> Neighbors[2000000];   bool Visited[2000000];   bool Leaf[2000000];   char Color[500001];   queue<int> Queue;   void bfs(int i) {     Visited[i] = true;     Queue.push(i);     while (Queue.empty() == false) {       int u = Queue.front();       Queue.pop();       Leaf[u] = true;       for (int v = 0; v < Neighbors[u].size(); v++)         if (Visited[Neighbors[u][v]] == false) {           Visited[Neighbors[u][v]] = true;           Queue.push(Neighbors[u][v]);           Leaf[u] = false;         }     }   }   int main() {     int T;     scanf( %d , &T);     for (int t = 1; t <= T; t++) {       int n;       scanf( %d , &n);       for (int i = 1; i <= n; i++) Neighbors[i].clear();       int u, v;       for (int i = 0; i + 1 < n; i++) {         scanf( %d %d , &u, &v);         Neighbors[u].push_back(v);         Neighbors[v].push_back(u);       }       scanf( %s , Color);       if (n < 3) {         printf( Draw n );         continue;       }       int n_ = n;       for (int i = 1; i <= n; i++)         if (Color[i - 1] ==  W ) {           Neighbors[n_ + 1].clear();           Neighbors[n_ + 2].clear();           Neighbors[n_ + 3].clear();           Neighbors[i].push_back(n_ + 1);           Neighbors[n_ + 1].push_back(i);           Neighbors[n_ + 1].push_back(n_ + 2);           Neighbors[n_ + 1].push_back(n_ + 3);           Neighbors[n_ + 2].push_back(n_ + 1);           Neighbors[n_ + 3].push_back(n_ + 1);           n_ += 3;         }       n = n_;       int won = 0;       for (int i = 1; i <= n; i++)         if (Neighbors[i].size() >= 4) {           printf( White n );           won = 1;           break;         }       if (won) continue;       for (int i = 1; i <= n; i++) Visited[i] = 0;       bfs(1);       if (Neighbors[1].size() == 1) Leaf[1] = true;       for (int i = 1; i <= n; i++)         if (Neighbors[i].size() >= 3) {           int leaves = 0;           for (int j = 0; j < Neighbors[i].size(); j++)             if (Leaf[Neighbors[i][j]]) leaves++;           if (Neighbors[i].size() - leaves >= 2) {             printf( White n );             won = 1;             break;           }         }       if (won) continue;       int left = 1;       while (left <= n && Neighbors[left].size() < 3) left++;       int right = n;       while (right > 0 && Neighbors[right].size() < 3) right--;       if (left <= n && right > 0 && left < right) {         int curr, prev = left;         int len = 2;         for (int i = 0; i < Neighbors[prev].size(); i++)           if (Leaf[Neighbors[prev][i]] == 0) curr = Neighbors[prev][i];         while (curr != right) {           if (Neighbors[curr][0] != prev) {             prev = curr;             curr = Neighbors[curr][0];           } else {             prev = curr;             curr = Neighbors[curr][1];           }           len++;         }         if (len % 2 == 1) {           printf( White n );           continue;         }       }       printf( Draw n );     }     return 0;   }   