func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e5 + 100;   int sz[N];   vector<int> g[N], g2[N];   signed main() {     int n;     std::cin >> n;     int sum = 0;     vector<int> nonOnes, ones;     for (int i = 0; i < n; ++i) {       std::cin >> sz[i];       sum += sz[i];       if (sz[i] > 1) {         nonOnes.push_back(i);       } else {         ones.push_back(i);       }     }     if (sum < 2 * n - 2) {       std::cout <<  NO ;       return 0;     }     for (int i = 1; i < nonOnes.size(); ++i) {       sz[nonOnes[i - 1]]--;       sz[nonOnes[i]]--;       g[nonOnes[i - 1]].push_back(nonOnes[i]);       g2[nonOnes[i - 1]].push_back(nonOnes[i]);       g2[nonOnes[i]].push_back(nonOnes[i - 1]);     }     bool f = false, s = false;     for (auto d : ones) {       bool fl = false;       if (!f && sz[nonOnes[0]]) {         g[d].push_back(nonOnes[0]);         g2[d].push_back(nonOnes[0]);         g2[nonOnes[0]].push_back(d);         sz[nonOnes[0]]--;         f = true;         continue;       }       if (!s && sz[nonOnes.back()]) {         g[d].push_back(nonOnes.back());         g2[d].push_back(nonOnes.back());         g2[nonOnes.back()].push_back(d);         sz[nonOnes.back()]--;         s = true;         continue;       }       for (auto x : nonOnes) {         if (sz[x]) {           g[d].push_back(x);           g2[x].push_back(d);           g2[d].push_back(d);           sz[x]--;           fl = true;           break;         }       }       if (!fl) {         std::cout <<  NO ;         return 0;       }     }     int answ = 0, m = 0;     for (int i = 0; i < n; ++i) {       m += g[i].size();     }     for (int i = 0; i < n; ++i) {       vector<int> d(n, 1e9);       std::queue<int> bfs;       d[i] = 0;       bfs.push(i);       while (!bfs.empty()) {         int v = bfs.front();         bfs.pop();         for (auto e : g2[v]) {           if (d[e] > d[v] + 1) {             answ = std::max(answ, d[v] + 1);             d[e] = d[v] + 1;             bfs.push(e);           }         }       }     }     std::cout <<  YES   << answ <<   n  << m <<   n ;     for (int i = 0; i < n; ++i) {       for (auto e : g[i]) {         std::cout << i + 1 <<     << e + 1 <<   n ;       }     }   }   