#include<bits/stdc++.h>
using namespace std;
struct RAGE{
int x;
int y;
bool fruit;
int pre;
int next;
int id;
};
RAGE a[200005];
int n;
int tot=0;
int sk[200005];
inline int qread()
{
register int x=0;
register char ch=getchar();
while(ch<'0'||ch>'9')
ch=getchar();
while(ch>='0'&&ch<='9')
{
x=x*10+ch-'0';
ch=getchar();
}
return x;
}
int main()
{
// freopen("fruit.in","r",stdin);
// freopen("fruit.out","w",stdout);
n=qread();
int x,l=-1;
a[0].pre=-1;
for(int i=1;i<=n;i++)
{
x=qread();
if(x!=l)
{
a[tot].y=i-1;
a[tot].next=tot+1;
tot++;
a[tot].id=tot;
a[tot].x=i;
a[tot].fruit=x;
a[tot].pre=tot-1;
}
l=x;
}
a[tot].y=n;
/*
int i=a[0].next;
while(a[i].pre!=-1)
{
cout<<a[i].x<<" "<<a[i].y<<endl;
i=a[i].next;
}
*/
int num=0;
while(n)
{
int i=a[0].next;
printf("%d ",a[i].x);
n--;
a[i].x++;
if(a[i].x>a[i].y)
{
num++;
sk[num]=a[i].id;
}
i=a[i].next;
while(a[i].pre!=-1)
{
if(a[i].fruit!=a[a[i].pre].fruit)
{
printf("%d ",a[i].x);
n--;
a[i].x++;
if(a[i].x>a[i].y)
{
num++;
sk[num]=a[i].id;
}
}
i=a[i].next;
}
while(num)
{
int l=a[sk[num]].pre,r=a[sk[num]].next;
a[l].next=a[r].id;
if(a[r].pre!=-1)
a[r].pre=a[l].id;
num--;
}
printf("\n");
}
return 0;
}