1 #include <bits/stdc++.h> 2 using namespace std; 3 #define rep(i,a,b) for(LL i = a;i <= b;++ i) 4 #define per(i,a,b) for(LL i = a;i >= b;-- i) 5 #define mem(a,b) memset((a),(b),sizeof((a))) 6 #define FIN freopen("in.txt","r",stdin) 7 #define IO ios_base::sync_with_stdio(0),cin.tie(0) 8 #define pb push_back 9 #define INF 0x3f3f3f3f 10 #define mod 1000000007 11 typedef long long LL; 12 typedef pair<int, int> PIR; 13 const int N = 2e5+5; 14 15 int n, x; 16 struct Node{ 17 int id, c; 18 Node (int _id, int _c) { id = _id; c = _c; } 19 bool operator < (const Node &r) const { return c < r.c; } 20 }; 21 vector <Node> v1, v2; 22 vector <PIR> ans; 23 24 int main() 25 {IO; 26 //FIN; 27 cin >> n; 28 rep(i, 1, n){ 29 cin >> x; 30 if(x == 0) v2.pb(Node(i, x)); 31 else v1.pb(Node(i, x)); 32 } 33 sort(v1.begin(), v1.end()); sort(v2.begin(), v2.end()); 34 int ok = 1; 35 rep(i, 0, (int)v1.size()-1){ 36 if(v2.size() < v1[i].c){ 37 ok = 0; 38 break; 39 } 40 int cnt = v1[i].c; 41 while(cnt){ 42 ans.pb(PIR(v1[i].id, v2[v2.size()-1].id)); 43 cnt--; 44 v2.pop_back(); 45 } 46 v2.pb(Node(v1[i].id, 0)); 47 } 48 if(!ok) cout << "NO" << endl; 49 else{ 50 cout << "YES" << endl; 51 rep(i, 0, (int)ans.size()-1) cout << ans[i].first << " " << ans[i].second << endl; 52 } 53 return 0; 54 }