func_code_string: #include <bits/stdc++.h>   clock_t t = clock();   namespace my_std {   using namespace std;   mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());   template <typename T>   inline T rnd(T l, T r) {     return uniform_int_distribution<T>(l, r)(rng);   }   template <typename T>   inline bool chkmax(T& x, T y) {     return x < y ? x = y, 1 : 0;   }   template <typename T>   inline bool chkmin(T& x, T y) {     return x > y ? x = y, 1 : 0;   }   template <typename T>   inline void read(T& t) {     t = 0;     char f = 0, ch = getchar();     double d = 0.1;     while (ch >  9  || ch <  0 ) f |= (ch ==  - ), ch = getchar();     while (ch <=  9  && ch >=  0 ) t = t * 10 + ch - 48, ch = getchar();     if (ch ==  . ) {       ch = getchar();       while (ch <=  9  && ch >=  0 ) t += d * (ch ^ 48), d *= 0.1, ch = getchar();     }     t = (f ? -t : t);   }   template <typename T, typename... Args>   inline void read(T& t, Args&... args) {     read(t);     read(args...);   }   char __sr[1 << 21], __z[20];   int __C = -1, __zz = 0;   inline void Ot() { fwrite(__sr, 1, __C + 1, stdout), __C = -1; }   inline void print(register int x) {     if (__C > 1 << 20) Ot();     if (x < 0) __sr[++__C] =  - , x = -x;     while (__z[++__zz] = x % 10 + 48, x /= 10)       ;     while (__sr[++__C] = __z[__zz], --__zz)       ;     __sr[++__C] =   n ;   }   void file() {}   inline void chktime() {}   long long ksm(long long x, int y) {     long long ret = 1;     for (; y; y >>= 1, x = x * x)       if (y & 1) ret = ret * x;     return ret;   }   }  // namespace my_std   using namespace my_std;   int n;   vector<int> V[101010];   int D[101010];   void dfs1(int x) {     for (auto v : V[x]) dfs1(v), chkmax(D[x], D[v]);     ++D[x];     for (int i = (0); i <= ((int)V[x].size() - 1); i++)       if (D[V[x][i]] == D[x] - 1) {         V[x].push_back(V[x][i]);         V[x].erase(V[x].begin() + i);         break;       }   }   stack<int> ans;   int Ans;   void dfs2(int x) {     if (!V[x].size()) {       for (int i = 0; printf( %d  , i), V[i].size(); i = V[i][0])         ;       printf(  n%d n , (int)ans.size());       while (ans.size()) printf( %d  , ans.top()), ans.pop();       return;     }     int s = V[x].back();     V[x].pop_back();     while (V[x].size())       V[V[x].back()].push_back(s), ans.push(s), s = V[x].back(), V[x].pop_back();     V[x].push_back(s);     dfs2(s);   }   int main() {     file();     read(n);     int x;     for (int i = (1); i <= (n - 1); i++) read(x), V[x].push_back(i);     dfs1(0);     Ans = n - D[0];     dfs2(0);     return 0;   }   