func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MaxN = 100100;   const int Mod = 1e9 + 7;   long long N, S;   long long p[MaxN];   long long deg[MaxN];   long long pref[MaxN];   long long depth[MaxN];   vector<long long> child[MaxN];   void solve(long long branch) {     for (int j = (2); j < (N + 1); j++) {       p[j] = j - 1;       deg[j - 1] = 1;       child[j - 1].push_back(j);       depth[j] = j;     }     deg[N] = 0;     if (branch == 1) {       cout <<  Yes  << endl;       for (int j = (2); j < (N + 1); j++) {         cout << p[j] <<    ;       }       exit(0);     }     long long lo = 2 * N - 1;     long long hi = N * (N + 1) / 2;     if (S < lo || S > hi) {       cout <<  No  << endl;       exit(0);     }     long long x = N - 2;     long long i = N;     long long z = 0;     vector<long long> anchor;     anchor.push_back(1);     depth[1] = 1;     while (S < hi) {       while (deg[anchor[z]] >= branch) {         for (auto w : child[anchor[z]]) {           anchor.push_back(w);           ;           depth[w] = depth[anchor[z]] + 1;         }         z++;         if (z > (long long)anchor.size()) {           assert(false);           cin.ignore();         }         x = (i - 1) - depth[anchor[z]];       };       ;       if (S + x <= hi) {         deg[p[i]]--;         child[p[i]].pop_back();         p[i] = anchor[z];         deg[anchor[z]]++;         assert(anchor[z] != i);         child[anchor[z]].push_back(i);         S += x;         x--;         i--;       } else {         x = (hi - S);         p[i] = (i - 1) - x;         S += x;       }     }     cout <<  Yes  << endl;     for (int j = (2); j < (N + 1); j++) {       cout << p[j] <<    ;     }   }   long long check() {     for (int i = (1); i < (N + 1); i++) pref[i] = 1;     for (long long i = N; i >= 2; i--) {       pref[p[i]] += pref[i];     }     long long sum = 0;     for (int i = (1); i < (N + 1); i++) {       sum += pref[i];     }     return sum;   }   long long f(long long branch) {     if (branch == 1) {       return (N * (N + 1)) / 2;     }     for (long long i = 1; i <= N; i++) {       deg[i] = 0;     }     long long cur = 1;     for (long long i = 2; i <= N; i++) {       while (deg[cur] >= branch) {         cur++;       }       p[i] = cur;       deg[cur]++;     }     long long ret = check();     return ret;   }   void load() {     cin >> N >> S;     long long lo = 2 * N - 1;     long long hi = N * (N + 1) / 2;     if (S < lo || S > hi) {       cout <<  No  << endl;       exit(0);     }   }   int main() {     ios_base::sync_with_stdio(false);     load();     long long lo = 1, hi = N - 1;     while (lo < hi) {       long long mid = (lo + hi) / 2;       if (f(mid) <= S) {         hi = mid;       } else {         lo = mid + 1;       }     };     solve(lo);     return 0;   }   