//二叉树结构数组表示法
#include<iostream>
using namespace std;
#define MAX 32768
int n;
struct tree
{
int left;
int date;
int right;
};
struct tree b_tree[MAX];
void create(int *node,int len)
{
int i;
int level;
int position;//左树-1,右树1
for(i=1;i<=len;i++)
{
b_tree[i].date=node[i];
position=0;
level=0;
while(position==0)
{
if(node[i]>b_tree[level].date)
if(b_tree[level].right!=-1)
level=b_tree[level].right;
else position=1;
else if(b_tree[level].left!=-1)
level=b_tree[level].left;
else position=-1;
}
if(position==-1)
b_tree[level].left=i;
else b_tree[level].right=i;
}
}
void print()
{
int i;
for(i=1;i<=n;i++)
cout<<b_tree[i].left<<'\t'<<b_tree[i].date<<'\t'<<b_tree[i].right<<'\n';
}
int main(void)
{
int i;
cin>>n;
int node[n+1];
for(i=1;i<=n;i++)
cin>>node[i];
for(i=0;i<MAX;i++)
{
b_tree[i].left=-1;
b_tree[i].date=0;
b_tree[i].right=-1;
}
create(node,n);
print();
return 0;
}