func_code_string: #include <bits/stdc++.h>   using namespace std;   int n;   bool vis[400];   set<int> sub[400];   vector<int> ga[400];   vector<int> path;   vector<int> ord;   int curr;   void DFS(int a) {     sub[a].insert(a);     for (int i = 0; i < ga[a].size(); i++) {       int b = ga[a][i];       if (vis[b]) continue;       vis[b] = true;       DFS(b);       for (__typeof(sub[b].begin()) it = sub[b].begin(); it != sub[b].end(); it++)         sub[a].insert(*it);     }   }   void SFD(int a) {     if (ord[curr] == a) {       curr++;       return;     }     while (1) {       if (curr == ord.size()) return;       bool upd = false;       for (int i = 0; i < ga[a].size(); i++) {         int b = ga[a][i];         if (vis[b] || sub[b].find(ord[curr]) == sub[b].end()) continue;         vis[b] = true;         path.push_back(b);         SFD(b);         path.push_back(a);         upd = true;         break;       }       if (!upd) return;     }   }   int main() {     cin >> n;     for (int i = 1; i < n; i++) {       int a, b;       cin >> a >> b;       ga[a].push_back(b);       ga[b].push_back(a);     }     int x;     while (cin >> x) ord.push_back(x);     vis[1] = true;     DFS(1);     memset(vis, false, sizeof(vis));     path.push_back(1);     vis[1] = true;     SFD(1);     if (path.size() != n * 2 - 1)       cout << -1;     else {       for (int i = 0; i < path.size(); i++) cout << path[i] <<    ;     }     return 0;   }   