func_code_string: #include <bits/stdc++.h>   using namespace std;   int main() {     int n;     cin >> n;     vector<int> a;     vector<vector<int> > gr(n + 1, a);     int any;     int th;     for (int i = 1; i <= n; i++) {       cin >> th;       if (th != 0) {         gr[i].push_back(th);         gr[th].push_back(i);       }     }     vector<int> chet(n + 1, 0);     for (int i = 1; i <= n; i++) {       if (gr[i].size() % 2 == 0) {         chet[i] = 1;         any = i;       }     }     if (n % 2 == 0) {       cout <<  NO ;     } else {       cout <<  YES n ;       queue<int> q;       q.push(any);       vector<int> dist(n + 1, 0);       vector<int> bfu(n + 1, 0);       vector<int> pred(n + 1, 0);       vector<vector<int> > next(n + 1, a);       bfu[any] = 1;       pred[any] = -1;       while (q.size() != 0) {         int v = q.front();         q.pop();         for (int i = 0; i < gr[v].size(); i++) {           if (bfu[gr[v][i]] == 0) {             pred[gr[v][i]] = v;             q.push(gr[v][i]);             bfu[gr[v][i]] = 1;             next[v].push_back(gr[v][i]);             dist[gr[v][i]] = dist[v] + 1;           }         }       }       vector<int> ans;       int maxd = dist[max_element(dist.begin(), dist.end()) - dist.begin()];       vector<int> ansu(n + 1, 0);       set<int> sss;       vector<set<int> > ch(maxd + 1, sss);       for (int i = 1; i <= n; i++) {         if (chet[i] == 1) {           ch[dist[i]].insert(i);         }       }       for (int i = ch.size() - 1; i >= 0; i--) {         for (auto j : ch[i]) {           queue<int> qq;           qq.push(j);           if (i != 0) {             if (ch[i - 1].find(pred[j]) != ch[i - 1].end()) {               ch[i - 1].erase(pred[j]);             } else {               ch[i - 1].insert(pred[j]);             }           }           while (qq.size() != 0) {             int v = qq.front();             qq.pop();             if (ansu[v] == 0) {               cout << v <<   n ;               ansu[v] = 1;               for (int jj = 0; jj < next[v].size(); jj++) {                 qq.push(next[v][jj]);               }             }           }         }       }     }     return 0;   }   