#include<bits/stdc++.h>
using namespace std;
struct node{
int id,fid,mid,num,space;
};
struct man{
int fa;
int id;
int pnum;
double num;
double space;
man()
{
num=space=0;
fa=pnum=0;
}
};
int f[10005];
int cmp(man a,man b){
if(a.space==b.space) return a.id<b.id;
return a.space>b.space;
}
int find(int x){
if(x==f[x]) return x;
return f[x]=find(f[x]);
}
void merge(int a,int b){
int fa=find(a);
int fb=find(b);
if(fa!=fb){
if(fa>fb){
f[fa]=fb;
}
else f[fb]=fa;
}
}
int main()
{
int i,n,k,j,x,c=0;
node a[10005];
man ans[10005];
cin>>n;
for(i=0;i<=10000;i++) f[i]=i;
for(i=0;i<n;i++){
cin>>a[i].id>>a[i].fid>>a[i].mid>>k;
if(a[i].fid!=-1) merge(a[i].id,a[i].fid);
if(a[i].mid!=-1) merge(a[i].id,a[i].mid);
for(j=0;j<k;j++){
cin>>x;
merge(a[i].id,x);
}
cin>>a[i].num>>a[i].space;
}
for(i=0;i<n;i++){
int id=find(a[i].id);
ans[id].id=id;
ans[id].num+=a[i].num;
ans[id].space+=a[i].space;
ans[id].fa=-1;
}
for(i=0;i<=9999;i++){
ans[find(i)].pnum++;
}
for(i=0;i<=9999;i++){
if(ans[i].fa==-1){
c++;
ans[i].num/=ans[i].pnum;
ans[i].space/=ans[i].pnum;
}
}
cout<<c<<endl;
sort(ans,ans+10000,cmp);
for(i=0;i<c;i++){
printf("%04d %d %.3f %.3f\n",ans[i].id,ans[i].pnum,ans[i].num,1.0*ans[i].space);
}
return 0;
}