using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

/*
 */

public class ALDS1_9_C
{
    private struct Node
    {
        public int NodeId;
        public int Value;
        public int ParentId;
        public int LeftId;
        public int RightId;

        public Node(int nodeId)
        {
            NodeId = nodeId;
            Value = 0;
            ParentId = -2;
            LeftId = -1;
            RightId = -1;
        }
    }

    public static void Main(string[] args)
    {
        //var exStdIn = new System.IO.StreamReader( "input.txt" );
        //System.Console.SetIn( exStdIn );

        int n = int.Parse(Console.ReadLine());
        int[] values = Console.ReadLine().Split(' ').Select(value => int.Parse(value)).ToArray();

        for (int i = 0; i < n; i++)
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendFormat("node {0}: key = {1}, ", i + 1, values[i]);
            int parentId = (i + 1) / 2 - 1;
            int leftId = (i + 1) * 2 - 1;
            int rightId = leftId + 1;
            if (parentId >= 0)
            {
                sb.AppendFormat("parent key = {0}, ", values[parentId]);
            }
            if (leftId < n)
            {
                sb.AppendFormat("left key = {0}, ", values[leftId]);
            }
            if (rightId < n)
            {
                sb.AppendFormat("right key = {0}, ", values[rightId]);
            }
            Console.WriteLine(sb.ToString());
        }
    }

    private static int GetRootId(Node[] nodes)
    {
        int rootId = -1;
        for (int j = 0; j < nodes.Length; j++)
        {
            if (nodes[j].ParentId == -1)
            {
                rootId = j;
                break;
            }
        }
        return rootId;
    }

    private static void Insert(Node[] nodes, int index, int value)
    {
        nodes[index].Value = value;
        int parent = GetRootId(nodes);
        if (parent == -1)
        {
            nodes[index].ParentId = -1;
            return;
        }
        while (true)
        {
            Node parentNode = nodes[parent];
            if (value < parentNode.Value)
            {
                if (parentNode.LeftId != -1)
                {
                    parent = parentNode.LeftId;
                }
                else
                {
                    nodes[parent].LeftId = index;
                    nodes[index].ParentId = parent;
                    return;
                }
            }
            else
            {
                if (parentNode.RightId != -1)
                {
                    parent = parentNode.RightId;
                }
                else
                {
                    nodes[parent].RightId = index;
                    nodes[index].ParentId = parent;
                    return;
                }
            }
        }
    }

    private static void Find(Node[] nodes, int index, int value)
    {
        if (index == -1)
        {
            Console.WriteLine("no");
            return;
        }
        if (nodes[index].Value == value)
        {
            Console.WriteLine("yes");
            return;
        }

        if (value < nodes[index].Value)
        {
            Find(nodes, nodes[index].LeftId, value);
        }
        else
        {
            Find(nodes, nodes[index].RightId, value);
        }
    }

    private static void Delete(Node[] nodes, int index, int value)
    {
        if (index == -1)
        {
            return;
        }
        if (nodes[index].Value == value)
        {
            if (nodes[index].LeftId == -1 && nodes[index].RightId == -1)
            {
                int parentId = nodes[index].ParentId;
                if (parentId != -1)
                {
                    if (nodes[index].Value < nodes[parentId].Value)
                    {
                        nodes[parentId].LeftId = -1;
                    }
                    else
                    {
                        nodes[parentId].RightId = -1;
                    }
                }
                nodes[index].ParentId = -2;
            }
            else if (nodes[index].LeftId == -1)
            {
                int parentId = nodes[index].ParentId;
                int rightId = nodes[index].RightId;
                if (parentId != -1)
                {
                    if (nodes[index].Value < nodes[parentId].Value)
                    {
                        nodes[parentId].LeftId = rightId;
                        nodes[rightId].ParentId = parentId;
                    }
                    else
                    {
                        nodes[parentId].RightId = rightId;
                        nodes[rightId].ParentId = parentId;
                    }
                }
                nodes[index].RightId = -1;
                nodes[index].ParentId = -2;
            }
            else if (nodes[index].RightId == -1)
            {
                int parentId = nodes[index].ParentId;
                int leftId = nodes[index].LeftId;
                if (parentId != -1)
                {
                    if (nodes[index].Value < nodes[parentId].Value)
                    {
                        nodes[parentId].LeftId = leftId;
                        nodes[leftId].ParentId = parentId;
                    }
                    else
                    {
                        nodes[parentId].RightId = leftId;
                        nodes[leftId].ParentId = parentId;
                    }
                }
                nodes[index].LeftId = -1;
                nodes[index].ParentId = -2;
            }
            else
            {
                int targetId = nodes[index].RightId;
                while (true)
                {
                    if (nodes[targetId].LeftId != -1)
                    {
                        targetId = nodes[targetId].LeftId;
                    }
                    else
                    {
                        break;
                    }
                }
                nodes[index].Value = nodes[targetId].Value;
                Delete(nodes, targetId, nodes[targetId].Value);
            }
            return;
        }

        if (value < nodes[index].Value)
        {
            Delete(nodes, nodes[index].LeftId, value);
        }
        else
        {
            Delete(nodes, nodes[index].RightId, value);
        }
    }

    private static void Preorder(Node[] nodes, StringBuilder sb, int index)
    {
        sb.AppendFormat(" {0}", nodes[index].Value.ToString());
        if (nodes[index].LeftId != -1)
        {
            Preorder(nodes, sb, nodes[index].LeftId);
        }
        if (nodes[index].RightId != -1)
        {
            Preorder(nodes, sb, nodes[index].RightId);
        }
    }

    private static void Inorder(Node[] nodes, StringBuilder sb, int index)
    {
        if (nodes[index].LeftId != -1)
        {
            Inorder(nodes, sb, nodes[index].LeftId);
        }
        sb.AppendFormat(" {0}", nodes[index].Value.ToString());
        if (nodes[index].RightId != -1)
        {
            Inorder(nodes, sb, nodes[index].RightId);
        }
    }

    private static void Postorder(Node[] nodes, StringBuilder sb, int index)
    {
        if (nodes[index].LeftId != -1)
        {
            Postorder(nodes, sb, nodes[index].LeftId);
        }
        if (nodes[index].RightId != -1)
        {
            Postorder(nodes, sb, nodes[index].RightId);
        }
        sb.AppendFormat(" {0}", nodes[index].Value.ToString());
    }
}



Measured memory_bytes: 16332