func_code_string: /* https://codeforces.com/blog/entry/87523 */   #include <stdio.h>   #include <stdlib.h>   #include <string.h>      #define N 100000      int *ej[N], eo[N];      void append(int i, int j) {    int o = eo[i]++;       if (o >= 2 && (o & o - 1) == 0)     ej[i] = (int *) realloc(ej[i], o * 2 * sizeof *ej[i]);    ej[i][o] = j;   }      int main() {    static int dd[N], ll[N + 1], qu[N], *qq[N], kk[N], dp[N + 1], dq[N + 1];    static char ans[N + 1];    int n, x, y, h, i, d, d_, k, s, cnt;       scanf( %d%d , &n, &x);    for (i = 0; i < n; i++)     ej[i] = (int *) malloc(2 * sizeof *ej[i]);    for (i = 1; i < n; i++) {     int p;        scanf( %d , &p), p--;     append(p, i);    }    for (i = 1; i < n; i++)     dd[i] = n;    cnt = 0, qu[cnt++] = 0;    for (d = 0; d < n && cnt; d++) {     qq[d] = (int *) malloc(cnt * sizeof *qq[d]), memcpy(qq[d], qu, (kk[d] = cnt) * sizeof *qu);     cnt = 0;     for (h = 0; h < kk[d]; h++) {      int o;         i = qq[d][h];      for (o = eo[i]; o--; ) {       int j = ej[i][o];          qu[cnt++] = j;      }     }    }    d_ = d;    for (d = 0; d < d_; d++)     ll[kk[d]]++;    dp[0] = -1;    for (k = 1; k <= n; k++) {     if (ll[k] == 0)      continue;     for (s = 0; s <= n; s++)      dq[s] = dp[s] ? 0 : (s >= k && dq[s - k] < ll[k] ? dq[s - k] : ll[k]) + 1;     for (s = 0; s <= n; s++)      if (!dp[s] && dq[s] <= ll[k])       dp[s] = k;    }    if (dp[x]) {     printf( %d n , d_);     memset(ll, 0, (n + 1) * sizeof *ll);     for (k = n, s = x; k >= 1; k--)      while (dp[s] == k)       s -= k, ll[k]++;     for (d = 0; d < d_; d++)      if (ll[kk[d]]) {       ll[kk[d]]--;       for (h = 0; h < kk[d]; h++)        ans[qq[d][h]] =  a ;      } else       for (h = 0; h < kk[d]; h++)        ans[qq[d][h]] =  b ;    } else {     printf( %d n , d_ + 1);     y = n - x;     for (d = 0; d < d_; d++)      if (x >= kk[d])       for (h = 0; h < kk[d]; h++)        ans[qq[d][h]] =  a , x--;      else if (y >= kk[d])       for (h = 0; h < kk[d]; h++)        ans[qq[d][h]] =  b , y--;      else {       for (h = 0; h < kk[d]; h++) {        i = qq[d][h];        if (eo[i])         ans[i] =  a , x--;       }       for (h = 0; h < kk[d]; h++) {        i = qq[d][h];        if (!eo[i]) {         if (x > 0)          ans[i] =  a , x--;         else          ans[i] =  b , y--;        }       }      }    }    printf( %s n , ans);    return 0;   }   