#include<stdio.h>
#define NIL (2e9+1)
#define N 2000

typedef struct{
  int l,r,p;
  int key;
}E;

E A[N];

int left(int i,int H){
  if(2 * i > H){
    return NIL;
  }
  return A[2 * i].key;
}

int right(int i,int H){
  if(2 * i + 1 > H){
    return NIL;
  }
  return A[2 * i + 1].key;
}

int parent(int i){
  if(i == 1){
    return NIL;
  }
  return A[i/2].key;
}

int main(){
  int H,i;
  scanf("%d",&H);

  for(i=1;i<=H;i++){
    scanf("%d",&A[i].key);
  }
  for(i=1;i<=H;i++){
    A[i].l = left(i,H);
    A[i].r = right(i,H);
    A[i].p = parent(i);
  }
  // printf("%d",A[0].r);

  for(i=1;i<=H;i++){
    printf("node %d: key = %d,",i,A[i].key);
    if(A[i].p != NIL)printf(" parent key = %d,",A[i].p);
    if(A[i].l != NIL)printf(" left key = %d,",A[i].l);
    if(A[i].r != NIL)printf(" right key = %d, \n",A[i].r);
    else printf(" \n");
  }
  
  return 0;
}
  

