#include<stdio.h>
#include<stdlib.h>
#include<queue>
#define MAX 1000
using namespace std;
struct node{
int x;
int i;
bool operator<(const node w)const{
return x>w.x;
}
};
int ans[1000];
bool b[1000][1000];//b[i][j]代表a[i]是否必须在a[j]之前出现
int num;
int cnt=0;
int indegree[1000];
node a[1000];
void TopSort()
{
priority_queue<node>q;
for(int i=0;i<num;i++){
if(indegree[i]==0){
q.push(a[i]);
}
}
while(!q.empty()){
node v=q.top();
ans[cnt++]=v.x;
q.pop();
for(int j=0;j<num;j++){
if(b[v.i][j]){
if(--indegree[j]==0){
q.push(a[j]);
}
}
}
}
}
int main()
{
int i,j;
scanf("%d",&num);
for(i=0;i<num;i++){
scanf("%d",&a[i].x);
a[i].i=i;
indegree[i]=0;
for(j=0;j<num;j++){
b[i][j]=false;
}
}
for(i=0;i<num;i++){
if(a[i].x==-1){
indegree[i]=-1;
continue;
}
indegree[i]=(i-a[i].x%num+num)%num;
for(j=a[i].x%num;j!=i;j=(j+1)%num){
b[j][i]=true;
}
}
TopSort();
for(i=0;i<cnt-1;i++)printf("%d ",ans[i]);
printf("%d",ans[cnt-1]);
return 0;
}