#include <bits/stdc++.h>
using namespace std;
#define MAX_N 100000
#define MAX_M 100000
const int INF = 1e9;

// cout << setprecision(15) << std::fixed;

int gcd (int x,int y){
  int b=x%y;
  if(b==0) return y;
  gcd(y,b);
} 

bool ori(int x){
  if(x>2&&x%2==0){
    return false;
  }
  for(int i=2;i<=sqrt(x);i++){
    if(x%i==0){
      return false;
    }
  }
  return true;
}


bool isstable(string in[],string out[],int n){
  for(int i=0;i<n;i++){
    for(int j=i+1;j<n;j++){
      for(int a=0;a<n;a++){
        for(int b=a+1;b<n;b++){
          if(atoi(in[i].c_str())==atoi(in[j].c_str()) && in[i]==out[b] && in[j]==out[a]){
            return false;
          }
        }
      }
    }
  }
  return true;
}

int insertionsort(vector<int> A,int n,int g){
  int cnt;
  for(int i=g;i<n;i++){
    int v=A[i];
    int j=i-g;
    while(j>=0&&A[j]>v){
      A[j+g]=A[j];
      j=j-g;
      //cut++;
    }
    A[j+g]=v;
  }
}

// int ctoi(char c) {
// 	switch (c) {
// 		case '0': return 0;
// 		case '1': return 1;
// 		case '2': return 2;
// 		case '3': return 3;
// 		case '4': return 4;
// 		case '5': return 5;
// 		case '6': return 6;
// 		case '7': return 7;
// 		case '8': return 8;
// 		case '9': return 9;
// 		case '-1': return -1;
// 		case '-2': return -2;
// 		case '-3': return -3;
// 		case '-4': return -4;
// 		case '-5': return -5;
// 		case '-6': return -6;
// 		case '-7': return -7;
// 		case '-8': return -8;
// 		case '-9': return -9;
// 		default: return -123;
// 	}
// }

vector<int> insert(vector<int> A,int n) {
  A.insert(A.begin()+0,n);
  return A;
}
vector<int> deleteve(vector<int> A,int n){
  for(int i=0;i<A.size();i++){
    if(A[i]==n){
      A.erase(A.begin()+i);
      break;
    }
  }
  return A;
}
vector<int> deleteFirst(vector<int> A){
  A.erase(A.begin()+0);
  return A;
}

vector<int> deleteLast(vector<int> A){
  A.pop_back();
  return A;
}

bool vecfind(int A[],int n,int x){
  int L=0;
  int R=n;
  while(L<R){
    int mid=(L+R)/2;
    if(A[mid]==x){
      return true;
    } 
    else if(x<A[mid]){
      R=mid;
    }
    else{
      L=mid+1;
    }
  }
  return false;
}

bool stfind(vector<string> A,int n,string x){
  for(int i=0;i<n;i++){
    if(A[i]==x) return true;
  }
  return false;
}

// bool solve_sum(int i,int m,int n){
//   if(m==0) return true;
//   if(i>=n) return false;
//   solve_sum(i+1,m,n);
//   solve_sum(i+1,m-A[i],n);
// }

int long long res=0;

void marge(int A[],int left,int mid,int right){
  int n1=mid-left;
  int n2=right-mid;
  int L[n1],R[n2];
  for(int i=0;i<n1;i++) L[i]=A[left+i];
  for(int i=0;i<n2;i++) R[i]=A[mid+i];
  L[n1]=INF;
  R[n2]=INF;
  for(int i=0,j=0,k=left;k<right;k++){
    if(L[i]<=R[j]){
      A[k]=L[i];
      i++;
    }
    else{
      A[k]=R[j];
      j++;
      res+=n1-i;
    }
  }
}

void margesort(int A[],int left,int right){
  if(left+1<right){
    int mid=(left+right)/2; 
    margesort(A,left,mid);
    margesort(A,mid,right);
    marge(A,left,mid,right);
  }
}

void koch_curve(int n,double L_x,double L_y,double R_x,double R_y){
  if(n==0) return;
  double S_x,S_y,U_x,U_y,T_x,T_y;
  //keisan{
    S_x=((L_x*2.0)+R_x)/3.0;
    S_y=((L_y*2.0)+R_y)/3.0;
    T_x=(L_x+(R_x*2.0))/3.0;
    T_y=(L_y+(R_y*2.0))/3.0;
    U_x=((T_x-S_x)/2.0)-(((T_y-S_y)/2)*sqrtf(3.0))+S_x;
    U_y=(((T_x-S_x)/2.0)*sqrtf(3.0))+((T_y-S_y)/2.0)+S_y;
  //}
  koch_curve(n-1,L_x,L_y,S_x,S_y);
  cout<<S_x<<" "<<S_y<<endl;
  koch_curve(n-1,S_x,S_y,U_x,U_y);
  cout<<U_x<<" "<<U_y<<endl;
  koch_curve(n-1,U_x,U_y,T_x,T_y);
  cout<<T_x<<" "<<T_y<<endl;
  koch_curve(n-1,T_x,T_y,R_x,R_y);
}

int bbst(int A[],int n){
  int cut=0;
  for(int i=0;i<n;i++){
    for(int j=n-1;j>i;j--){
      if(A[j]<A[j-1]){
        swap(A[j],A[j-1]);
        cut++;
      }
    }
  }
  return cut;
}

int A[MAX_N],ans=0;

int pratition(int p,int r){
  int x=A[r];
  int i=p-1;
  for(int j=p;j<r;j++){
    if(A[j]<=x){
      i++;
      swap(A[i],A[j]);
      //ans+=A[i]+A[j];
    }
  }
  swap(A[i+1],A[r]);
  //ans+=A[i+1]+A[r];
  return i+1;
}

void quicksort(int p,int r){
  if(p<r){
    int q=pratition(p,r);
    quicksort(p,q-1);
    quicksort(q+1,r);
  }
}




int main(){
  map<int,int> mam;
  int n;
  cin>>n;
  for(int i=0;i<n;i++) mam[i]=-1;
  vector<vector<int>> G(n);
  string type[n]; 
  int dep[n];
  for(int i=0;i<n;i++){
    int a,b;
    cin>>a>>b;
    if(b==0){
      type[a]="leaf";
    }
    else{
      type[a]="internal node";
    }
    for(int j=0;j<b;j++){
      int c;
      cin>>c;
      mam[c]=a;
      G[a].push_back(c);
    }
  }
  for(int i=0;i<n;i++) dep[i]=0;
  dep[-1]=-1;
  for(int i=0;i<n;i++) dep[i]=dep[mam[i]]+1;
  for(int i=0;i<n;i++) dep[i]=dep[mam[i]]+1;
  for(int i=0;i<n;i++){
    if(mam[i]==-1) type[i]="root";
  }

  for(int i=0;i<n;i++){
    cout<<"node "<<i<<":"<<" parent = "<<mam[i]<<","<<" depth = "<<dep[i]<<","<<" "<<type[i]<<","<<" [";
    for(int j=0;j<G[i].size();j++){
      cout<<G[i][j];
      if(j+1<G[i].size()){
        cout<<", ";
      }
    }
    cout<<"]"<<endl;
  }
}



Measured memory_bytes: 16524