#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
#include<string.h>
#include<math.h>
#include<limits.h>
#define max(x,y) (x)>(y)?(x):(y)
#define min(x,y) (x)<(y)?(x):(y)
#define rep(i,n) for((i)=0;(i)<(n);(i)++)
#define reps(i,n,k) for((i)=0;(i)<(n);(i)+=(k))
#define MOD ((int)1e9+7)
#define INF INFINITY
typedef long long ll;
typedef unsigned long long ull;
typedef struct pair_{int x,y;}pair_t;
typedef struct{
    int x;
    int i;
    int cnt;
}pair2_t;
void swap(int *x, int *y){int t=*x;*x=*y;*y=t;}
void debug(char *f, ...){va_list a;va_start(a,f);vfprintf(stderr,f,a);va_end(a);}
int asc_cmp(const void *x, const void *y){int X=((pair2_t*)x)->x,Y=((pair2_t*)y)->x;if(X<Y)return -1;else if(X>Y)return 1;else return 0;}
int asc2_cmp(const void *x, const void *y){int X=((pair2_t*)x)->i,Y=((pair2_t*)y)->i;if(X<Y)return -1;else if(X>Y)return 1;else return 0;}
int desc_cmp(const void *x, const void *y){int X=*((int*)x),Y=*((int*)y);if(X<Y)return 1;else if(X>Y)return -1;else return 0;}


int main(){
    int n;scanf("%d",&n);
    int a[200001];
    for(int i=0;i<n-1;i++){
        scanf("%d",&a[i]);
    }
    int cnt[200000]={};
    for(int i=0;i<n-1;i++){
        cnt[a[i]]++;
    }
    int b[200000],b_i=0;
    for(int i=0;i<=200000;i++){
        if(cnt[i])b[b_i++]=cnt[i];
    }
    for(int i=0;i<n-1;i++){
        printf("%d\n",cnt[i+1]);
    }
    printf("0\n");
}