func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 1000010;   long long N, S;   long long fa[maxn], q[maxn], d[maxn], head, tail, sz[maxn], son[maxn];   bool check(long long Mid) {     long long tN = N, now = 1, p = 1, res = 0;     while (tN) {       res += min(p, tN) * now;       if (res > S) return false;       tN -= min(p, tN);       p *= Mid;       now++;     }     return true;   }   int main() {     cin >> N >> S;     long long Mn = N + N - 1;     long long Mx = N * (N + 1) / 2;     if (S < Mn || S > Mx) return puts( NO ), 0;     long long L = 1, R = N - 1, Mid, res;     while (L <= R) {       Mid = (L + R) / 2;       if (check(Mid))         res = Mid, R = Mid - 1;       else         L = Mid + 1;     }     puts( YES );     for (int i = 1; i <= N; i++) sz[i] = 1;     long long Now = Mx, D = 2;     for (int i = N;; i--) {       if (Now == S) break;       if (sz[D] == sz[D - 1] * res) D++;       if (Now - S >= i - D) {         sz[D]++;         sz[i]--;         Now -= (i - D);       } else {         sz[i]--;         sz[i - (Now - S)]++;         Now = S;       }     }     head = tail = 1;     q[head] = 1;     d[1] = 1;     long long p = 1;     for (int i = 2; i <= N; i++) {       if (sz[i] == 0) break;       L = p + 1;       R = p + sz[i];       for (int j = L; j <= R; j++) {         while (d[q[head]] != i - 1 || son[q[head]] == res) {           head++;         }         fa[j] = q[head];         son[q[head]]++;         q[++tail] = j;         d[j] = i;       }       p = R;     }     for (int i = 2; i <= N; i++) printf( %lld  , fa[i]);   }   