#include<stdio.h>
#define MAX 251

typedef struct{
  int key;
  int parent;
  int left;
  int right;
}Dot;

Dot A[MAX];

void Print(int i){
  printf("node %d: ",i);
  printf("key = %d, ",A[i].key);
  if(A[i].parent)printf("parent key = %d, ",A[A[i].parent].key);
  if(A[i].left) printf("left key = %d, ",A[A[i].left].key);
  if(A[i].right)printf("right key = %d, ",A[A[i].right].key);
  printf("\n");
}


int main(){
  int n;
  int i;

  scanf("%d",&n);
  for(i=1;i<=n;i++){//i=nodeで１オリジンにしたから、みんなずれる。0番目作らない
    scanf("%d",&A[i].key);//配列は層ごとに左から、値は入力されたものを使う
    A[i].parent=i/2;//親、子供を
    if(2*i<=n)A[i].left=2*i;
    if(2*i+1<=n) A[i].right=2*i+1;
  }
  
  for(i=0;i<n;i++) Print(i+1);
  return 0;
}



