let inputString = '';

process.stdin.on('data', inputStdin => {
    inputString += inputStdin;
});
process.stdin.on('end', function() {
    const input = inputString.replace(/\s*$/, '')
        .split('\n')
        .map(str => str.replace(/\s*$/, ''));

    printNodes(Number(input.shift()), input);
});



const printNodes = (size, nodeInfoArr) => {
  const nodeArr = Array
    .from({ length: size }, generateInitialValue);
  const rootCandidates = {};
  for (let i=0; i<size; i++) {
    const [
      id,
      leftChild,
      rightChild,
    ] = nodeInfoArr[i]
      .split(' ')
      .map((s) => Number(s));

    let type = 'leaf';

    if (leftChild !== -1) {
      type = 'internal node';
      nodeArr[id].degree++;
      nodeArr[leftChild].parent = id;
      nodeArr[leftChild].sibling = rightChild;
      delete rootCandidates[leftChild];
    }

    if (rightChild !== -1) {
      type = 'internal node';
      nodeArr[id].degree++;
      nodeArr[rightChild].parent = id;
      nodeArr[rightChild].sibling = leftChild;
      delete rootCandidates[rightChild];
    }

    nodeArr[id].leftChild = leftChild;
    nodeArr[id].rightChild = rightChild;
    nodeArr[id].type = type;

    if (nodeArr[id].parent === -1) {
      rootCandidates[id] = true;
    } else {
      delete rootCandidates[id];
    }

    // console.log(`i: ${i}, ${JSON.stringify(nodeArr[id])}`);
  }

  // console.log(Object.keys(rootCandidates));
  const rootId = Object.keys(rootCandidates)[0];
  nodeArr[rootId].type = 'root';

  fillDepth(rootId, nodeArr);

  fillHeight(nodeArr);

  nodeArr.forEach(printNode);
};

const generateInitialValue = (_, index) => {
  return {
    id: index,
    leftChild: -1,
    rightChild: -1,
    parent: -1,
    sibling: -1,
    degree: 0,
    depth: 0,
    height: 0,
    type: 'leaf',
  };
};

const fillDepth = (id, nodeArr, depth = 0) => {
  nodeArr[id].depth = depth;
  const {
    leftChild,
    rightChild,
  } = nodeArr[id];
  if (leftChild !== -1) {
    fillDepth(leftChild, nodeArr, depth + 1);
  }
  if (rightChild !== -1) {
    fillDepth(rightChild, nodeArr, depth + 1);
  }
};

const fillHeight = (nodeArr) => {
  for (let i=0; i<nodeArr.length; i++) {
    const { id } = nodeArr[i];
    nodeArr[id].height = getHeight(id, nodeArr);
  }
}

const getHeight = (id, nodeArr) => {
  const {
    leftChild,
    rightChild,
  } = nodeArr[id];

  let leftHeight = 0;
  if (leftChild !== -1) {
    leftHeight = getHeight(leftChild, nodeArr) + 1;
  }

  let rightHeight = 0;
  if (rightChild !== -1) {
    rightHeight = getHeight(rightChild, nodeArr) + 1;
  }

  return Math.max(leftHeight, rightHeight);
};

const printNode = (node) => {
  console.log(`node ${node.id}: parent = ${node.parent}, sibling = ${node.sibling}, degree = ${node.degree}, depth = ${node.depth}, height = ${node.height}, ${node.type}`);
};
