#include <iostream>
#include <algorithm>
#include "string"
using namespace std;
const int N=100010;
typedef struct Binary_Node{
int dad;
int val;
struct Binary_Node *lchild;
struct Binary_Node *rchild;
}*BTree,Binary_Node;
int n;
int a[N];
int BST_insert(BTree &T,int x,int father){
if(T==NULL){
T= (BTree)malloc(sizeof(Binary_Node));
T->dad=father;
T->val=x;
T->lchild=T->rchild=NULL;
return 1;
} else
if(x<T->val){
return BST_insert(T->lchild,x,T->val);
} else if(x>T->val){
return BST_insert(T->rchild,x,T->val);
}
return 0;
}
BTree BST_search(BTree T,int x){
while(T!=NULL && x!=T->val){
if(x<T->val)
T=T->lchild;
else
T=T->rchild;
}
return T;
}
int main() {
cin >>n;
BTree T=NULL;
for(int i=0;i<n;i++){
int x;
scanf("%d",&x);
a[i] =x;
BST_insert(T,x,-1);
}
for(int i=0;i<n;i++){
BTree idx=BST_search(T,a[i]);
printf("%d\n",idx->dad);
}
return 0;
}