// Complete Binary Tree
#include <stdio.h>

#define MAX 250
#define NIL -1 // 番兵

int parent(int i){
  return i / 2; // 親の接点番号
}

int left(int i){
  return 2 * i; // 左の子の接点番号
}

int right(int i){
  return 2 * i + 1; // 右の子の接点番号
}

int main(){
  int i, n, A[MAX];

  scanf("%d", &n);

  for(i=0; i <= n; i++){
    A[parent(i)] = A[left(i)] = A[right(i)] = NIL;
  }

  // 1オリジンでキーの列を入力
  for(i=1; i <= n; i++){
    scanf("%d", &A[i]);
  }
  
  for(i=1; i <= n; i++){
    printf("node %d: key = %d, ", i, A[i]);
    if(A[parent(i)] != NIL)printf("parent key = %d, ", A[parent(i)]);
    if(A[left(i)] != NIL)printf("left key = %d, ", A[left(i)]);
    if(A[right(i)] != NIL)printf("right key = %d, ", A[right(i)]);
    printf("\n");
  }
  
  return 0;
}

