#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k[1509],dp[1509][2],ok[1509];
vector<int>e[1509];
struct node
{
int v1,v2;
};
void dfs(int x,int rt)
{
int siz=e[x].size();
if(siz==0)
{
dp[x][1]=k[x];
dp[x][0]=0;
return;
}
dp[x][1]=k[x];
for(int i=0;i<siz;i++)
{
int v=e[x][i];
if(v==rt)continue;
dfs(v,x);
dp[x][1]+=min(dp[v][1],dp[v][0]);
}
dp[x][0]=0x3f3f3f3f;
int sb=0;
for(int i=0;i<siz;i++)
{
int v=e[x][i];
if(v==rt)continue;
if(!ok[v])sb+=dp[v][1];
else sb+=min(dp[v][1],dp[v][0]);
}
for(int i=0;i<siz;i++)
{
int v=e[x][i];
if(v==rt)continue;
if(ok[v])dp[x][0]=min(dp[x][0],dp[v][1]+sb-min(dp[v][1],dp[v][0]));
else dp[x][0]=min(dp[x][0],sb);
}
}
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int x;
cin>>x>>k[i]>>ok[i];
for(int j=0;j<ok[i];j++)
{
int pos;
cin>>pos;
e[x].push_back(pos);
}
}
dfs(1,0);
for(int i=1;i<=n;i++)cout<<dp[i][0]<<" "<<dp[i][1]<<"\n";
cout<<min(dp[1][1],dp[1][0]);
return 0;
}
dp[i][0/1]表示第i个(不)选的最小值