#include <stdio.h>
#include <stdlib.h>
#define NIL -1 //represents the NULL pointer
typedef struct Node {
int data;
int next;
int rank;
} List;
void Ranking( List A[], int n );
int main()
{
int n, i;
List *A;
scanf("%d", &n);
A = (List *)malloc(sizeof(List)*n);
for (i=0; i<n; i++) scanf("%d", &A[i].next);
//表示节点i之后的节点是A[i].next。
Ranking(A, n);
for (i=0; i<n; i++) printf("%d ", A[i].rank);
printf("\n");
return 0;
}
/* Your function will be put here */
void Ranking( List A[], int n ) {
int node[n];
int temp=n;
int pos;
for(int i=0; i<n; i++) {
if(A[i].next==-1) {
pos=i;
} else {
node[A[i].next]=i;
//反向储存这个节点的上上一个节点
}
}
while(temp){
A[pos].rank=temp--;
pos=node[pos];
}
}