#include<stdio.h>

#define S 250
#define N1 -2000000000
#define N2 2000000000
#define NIL -1

struct Node{
  int id;
  int k;
  int pk;
  int lk;
  int rk;
};

struct Node T[S];

int Parent(int);
int Left(int);
int Right(int);
void Print(int);

main(){
  
  int i;
  int p = 0;
  int l = 0;
  int r = 0;
  int n = 0;
  
  scanf("%d",&n);
  if(n < 0 || S < n) return 0;
  
  for(i=1;i <= n;i++){
    T[i].id = NIL;
    T[i].k = NIL;
    T[i].pk = NIL;
    T[i].lk = NIL;
    T[i].rk = NIL;
  }
  
  for(i=1;i <= n;i++){
    scanf("%d",&T[i].k);
    
    if(T[i].k < N1 || N2 < T[i].k) return 0;
    
    T[i].id = i;
  }
  
  for(i=1;i <= n;i++){
    p = Parent(i);
    
    if(p != NIL){
      T[i].pk = T[p].k;
    }
    
    l = Left(i);
    
    if(l != NIL || l <= n){
      T[i].lk = T[l].k;
    }
    
    r = Right(i);
    
    if(r != NIL ||  r <= n){
      T[i].rk = T[r].k;
    }
  }
  for(i=1;i <= n;i++){
    Print(i);
    printf("\n");
  }
  return 0;
}


int Parent(int i){
  
  return (i/2);
}

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

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

void Print(int i){
  
  printf("node %d: key = %d,",T[i].id,T[i].k);
  
  if(T[i].pk > 0){
    printf(" parent key = %d,",T[i].pk);
  }
  
  if(T[i].lk > 0){
    printf(" left key = %d,",T[i].lk);
  }
  
  if(T[i].rk > 0){
    printf(" right key = %d,",T[i].rk);
  }
}