func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m, a[200005], head[200005];   struct edge {     int to, nxt;     edge(int _t = -1, int _n = -1) {       to = _t;       nxt = _n;     }   } e[400005];   void addedge(int u, int v) {     e[m] = edge(v, head[u]);     head[u] = m++;     e[m] = edge(u, head[v]);     head[v] = m++;   }   vector<int> g;   int dp[200005], s;   void dfs1(int fa, int u) {     if (a[u] == -1)       dp[u] = 1;     else       dp[u] = 0;     for (int p = head[u]; p != -1; p = e[p].nxt) {       int v = e[p].to;       if (v == fa) continue;       dfs1(u, v);       dp[u] += dp[v];     }   }   void dfs2(int fa, int u) {     if (s == 0 || dp[u] == 0) return;     int x;     for (int p = head[u]; p != -1; p = e[p].nxt) {       int v = e[p].to;       x = v;       if (v == fa || dp[v] == 0) continue;       g.push_back(v + 1);       if (a[v] == -1) {         s--;         dp[v]--;       } else {         s++;         dp[v]++;       }       a[v] = -a[v];       dfs2(u, v);       if (s == 0) return;       g.push_back(u + 1);       if (a[u] == -1) {         s--;         dp[u]--;       } else {         s++;         dp[u]++;       }       a[u] = -a[u];     }     if (a[u] == -1) {       a[u] = 1;       if (fa == -1) {         g.push_back(x + 1);         g.push_back(1);         g.push_back(x + 1);         return;       } else {         g.push_back(fa + 1);         g.push_back(u + 1);         s--;         dp[u]--;         if (a[fa] == -1) {           s--;           dp[fa]--;         } else {           s++;           dp[fa]++;         }         a[fa] = -a[fa];       }     }   }   int main() {     scanf( %d , &n);     for (int i = 0; i < n; ++i) {       scanf( %d , &a[i]);       if (a[i] == -1) s++;     }     memset(head, -1, sizeof(head));     m = 0;     for (int i = 1; i < n; ++i) {       int u, v;       scanf( %d%d , &u, &v);       addedge(u - 1, v - 1);     }     if (s == 0) {       printf( 1 n );       return 0;     }     g.clear();     dfs1(-1, 0);     dfs2(-1, 0);     printf( 1 );     for (int i = 0; i < g.size(); ++i) printf(  %d , g[i]);     printf(  n );     return 0;   }   