#include<stdio.h>
#include<stdlib.h>
#include<math.h>

struct node{
  int id;
  int k;
  int pk;
  int lk;
  int rk;
};
typedef struct node *Node;

int parent(i){
  return floor(i/2);
}

int left(i){
  return 2*i;
}

int right(i){
  return (2*i)+1;
}

int main(){
  
  int H, i, K, P;
  Node n;
  scanf("%d",&H);
  
  n = (Node)malloc(sizeof(Node)*H);
  
  for(i=0; i<H; i++){
    n[i].id = i+1;
    scanf("%d", &K);
    n[i].k = K;
    n[i].pk = 0;
    n[i].lk = 0;
    n[i].rk = 0;
  }
  
  for(i=0; i<H; i++){

    if(i != 0){
    n[i].pk = n[parent(n[i].id)-1].k;
    }

    if(n[i].id*2 <= H){
      n[i].lk = n[left(n[i].id)-1].k;
    }

    if(n[i].id*2+1 <= H){
      n[i].rk = n[right(n[i].id)-1].k;
    }
    
    printf("node %d: key = %d, ", n[i].id, n[i].k);
    if(n[i].pk != 0){
      printf("parent key = %d, ",n[i].pk);
    }
    if(n[i].lk != 0){
      printf("left key = %d, ",n[i].lk);
    }
    if(n[i].rk != 0){
      printf("right key = %d, ",n[i].rk);
    }
    printf("\n");
  }
  
  return 0;
}

