func_code_string: #include <bits/stdc++.h>   using namespace std;   const int mx = 1e3 + 10;   bool f[2][mx];   int nxt[mx], bef[mx];   int d[mx];   int main() {     int n, x, u;     scanf( %d %d , &n, &x);     memset(bef, -1, sizeof bef);     memset(nxt, -1, sizeof nxt);     for (int i = 1; i <= n; i++) {       scanf( %d , &u);       if (u != 0) {         nxt[i] = u;         bef[u] = i;       }     }     int lx = 0;     int c = 0;     for (int i = 1; i <= n; i++) {       if (bef[i] == -1) {         u = i;         int len = 0;         int lenx = 0;         while (u != -1) {           if (u == x || lenx > 0) lenx++;           len++;           u = nxt[u];         }         if (lenx == 0)           d[c++] = len;         else           lx = lenx;       }     }     int rw = 0;     f[0][0] = true;     for (int i = 0; i < c; i++) {       rw ^= 1;       for (int s = 0; s < mx; s++) {         f[rw][s] = f[rw ^ 1][s];         if (s >= d[i]) f[rw][s] |= f[rw ^ 1][s - d[i]];       }     }     vector<int> ans;     for (int s = 0; s < n; s++)       if (f[rw][s]) printf( %d n , s + lx);     return 0;   }   