#include <bits/stdc++.h>
#define pii pair<int,int>
#define s1 first
#define s2 second
#define N 200011
using namespace std;
int n,x[N],y[N],to[N];
pii a[N];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)scanf("%d",&a[i].s1),a[i].s2=i;
sort(a+1,a+1+n);
bool flg=0;
if(a[1].s1)
{
flg=1;
for(int i=2;i<=n;++i)if(a[i].s1==a[i-1].s1){swap(a[1],a[i-1]);swap(a[2],a[i]);flg=0;break;}
}
x[a[1].s2]=1;y[a[1].s2]=1;
for(int i=2;i<=n;++i)
{
int v=a[i].s1,u=a[i].s2;
if(!v)x[u]=i,y[u]=1,to[u]=a[i].s2;
else if(v<=i-1)
{
x[u]=i,y[u]=y[a[i-v].s2];
to[u]=a[i-v].s2;
}
else
{
x[u]=i;y[u]=1+v-(i-1);
to[u]=a[1].s2;
}
}
if(flg)
{
if(n==2)printf("NO\n"),exit(0);
y[a[2].s2]=1;
to[a[1].s2]=a[2].s2;to[a[2].s2]=a[3].s2;to[a[3].s2]=a[1].s2;
}
else if(!a[1].s1)to[a[1].s2]=a[1].s2;
else to[a[1].s2]=a[2].s2;
printf("YES\n");
for(int i=1;i<=n;++i)printf("%d %d\n",x[i],y[i]);
for(int i=1;i<=n;++i)printf("%d ",to[i]);putchar(10);
fclose(stdin);fclose(stdout);return 0;
}