#include<bits/stdc++.h>
using namespace std;
int rd[200001],rd2[200001],book[200001],book2[200001];
int n,a[200001],ans[200001],ans2[200001];
struct b{
int next,to;
}v[200001];
int first[200001];
int l;
void push(int x,int y,int i);
int mini;
priority_queue<int,vector<int> , greater<int> > q;
priority_queue<int,vector<int> , less<int> > q2;
int main(){
cin >> n;
for(int i=1;i<=n;i++){
cin >> a[i];
if(a[i]){
push(a[i],i,++l);
rd[i]++;
rd2[i]++;
}
}
for(int i=1;i<=n;i++){
if(rd[i]==0){
q.push(i);
q2.push(i);
}
}
for(int k=1;k<=n;k++){
int b=q.top();
book[b]=1;
ans[b]=k;
q.pop();
int b2=q2.top();
book2[b2]=1;
ans2[b2]=k;
q2.pop();
for(int i=first[b];i!=0;i=v[i].next){
if(book[v[i].to])continue;
if(--rd[v[i].to] ==0){
q.push(v[i].to);
}
}
for(int i=first[b2];i!=0;i=v[i].next){
if(book2[v[i].to])continue;
if(--rd2[v[i].to] ==0){
q2.push(v[i].to);
}
}
}
for(int i=1;i<=n;i++)cout << ans[i] << " ";
cout << endl;
for(int i=1;i<=n;i++)cout << ans2[i] << " ";
return 0;
}
void push(int x,int y,int l){
v[l].next=first[x];
v[l].to=y;
first[x]=l;
return;
}