func_code_string: #include <bits/stdc++.h>   using namespace std;   bool poss = true;   int n, rt = 0;   vector<int> v, res;   vector<vector<int>> adj;   vector<pair<int, int>> dfs(int second, int p) {     vector<pair<int, int>> cur;     for (auto i : adj[second]) {       if (i != p) {         vector<pair<int, int>> ch = dfs(i, second);         for (auto i : ch) {           cur.push_back(i);         }       }     }     sort(cur.begin(), cur.end());     for (int i = 0; i < cur.size(); ++i) {       if (i < v[second])         cur[i].first = i;       else         cur[i].first = i + 1;     }     if (v[second] > cur.size()) poss = false;     cur.push_back({v[second], second});     return cur;   }   int main() {     cin >> n;     adj.assign(n, vector<int>());     v.assign(n, 0);     res.assign(n, 0);     for (int i = 0; i < n; ++i) {       int x;       cin >> x >> v[i];       x--;       if (x != -1) {         adj[x].push_back(i);         adj[i].push_back(x);       } else         rt = i;     }     vector<pair<int, int>> cur = dfs(rt, rt);     for (auto i : cur) {       res[i.second] = i.first + 1;     }     if (!poss) {       cout <<  NO ;       return 0;     }     cout <<  YES n ;     for (auto i : res) {       cout << i <<    ;     }     return 0;   }   