#include <bits/stdc++.h>
#define forn(i, n) for (int i = 0; i < int(n); i++)
using namespace std;
const int N = 1000 + 7;
int n;
int a[N];
int main() {
scanf("%d", &n);
forn(i, n)
scanf("%d", &a[i]);
int sum = 0;
forn(i, n)
sum += a[i];
if (sum < 2 * n - 2){
puts("NO");
return 0;
}
vector<int> ones;
forn(i, n) if (a[i] == 1){
a[i] = 0;
ones.push_back(i);
}
int t = ones.size();
int dm = (n - t) - 1 + min(2, t);
printf("YES %d\n%d\n", dm, n - 1);
int lst = -1;
if (!ones.empty()){
lst = ones.back();
ones.pop_back();
}
forn(i, n){
if (a[i] > 1){
if (lst != -1){
--a[lst];
--a[i];
printf("%d %d\n", lst + 1, i + 1);
}
lst = i;
}
}
for (int i = n - 1; i >= 0; --i){
while (!ones.empty() && a[i] > 0){
--a[i];
printf("%d %d\n", i + 1, ones.back() + 1);
ones.pop_back();
}
}
return 0;
}
1672C - Unequal Array | 1706C - Qpwoeirut And The City |
1697A - Parkway Walk | 1505B - DMCA |
478B - Random Teams | 1705C - Mark and His Unfinished Essay |
1401C - Mere Array | 1613B - Absent Remainder |
1536B - Prinzessin der Verurteilung | 1699B - Almost Ternary Matrix |
1545A - AquaMoon and Strange Sort | 538B - Quasi Binary |
424A - Squats | 1703A - YES or YES |
494A - Treasure | 48B - Land Lot |
835A - Key races | 1622C - Set or Decrease |
1682A - Palindromic Indices | 903C - Boxes Packing |
887A - Div 64 | 755B - PolandBall and Game |
808B - Average Sleep Time | 1515E - Phoenix and Computers |
1552B - Running for Gold | 994A - Fingerprints |
1221C - Perfect Team | 1709C - Recover an RBS |
378A - Playing with Dice | 248B - Chilly Willy |