#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=1000007;
struct node{
__int64 real;
int sum;
node *next;
}myhash[maxn];
int get_hash(__int64 real)
{
int hash;
hash=real%maxn;
if(hash<0)
hash+=maxn;
node *p=&myhash[hash];
while(1)
{
if(p->sum==0)
{
p->real=real;
p->sum=1;
return p->sum;
}
else
if(p->real==real)
{
p->sum++;
return p->sum;
}
if(p->next==NULL)
break;
p=p->next;
}
p->next=new node;
p=p->next;p->real=real;p->sum=1;p->next=NULL;
return p->sum;
}
int main(){
int n;
int i;
__int64 real;
scanf("%d",&n);
memset(myhash,0,sizeof(myhash));
for(i=1;i<=n;i++)
{
scanf("%I64d",&real);
printf("%d\n",get_hash(real));
}
return 0;
}