#include
#include
using namespace std;
const int N = 10010;
struct Peo {
double housenum, area;
}people[N];
struct Fam {
int id, num;
double totalhousenum, totalarea;
}family[N];
int f[N];
bool vispeople[N], visfamily[N];
int n;
int find(int x) {
if(x != f[x]) f[x] = find(f[x]);
return f[x];
}
void merge(int a, int b) {
a = find(a), b = find(b);
if(a != b) f[b] = a;
}
bool cmp(Fam a, Fam b) {
if(a.num*b.totalarea != a.totalarea*b.num) return a.totalarea*b.num > b.totalarea*a.num;
else return a.id < b.id;
}
int main() {
cin >> n;
for(int i = 0; i < N; i++) f[i] = i;
while(n--) {
int iid, fa, ma, k;
cin >> iid >> fa >> ma;
vispeople[iid] = 1;
if(fa != -1) {
vispeople[fa] = 1;
merge(iid, fa);
}
if(ma != -1) {
vispeople[ma] = 1;
merge(iid, ma);
}
cin >> k;
for(int j = 0; j < k; j++) {
int c; cin >> c;
vispeople[c] = 1;
merge(iid, c);
}
cin >> people[iid].housenum >> people[iid].area;
}
int cnt = 0;
for(int i = 0; i < N; i++) {
if(vispeople[i]) {
int x = find(i);
if(visfamily[x]) {
for(int j = 0; j < cnt; j++) {
if(find(family[j].id) == x) {
family[j].num++;
family[j].totalhousenum += people[i].housenum;
family[j].totalarea += people[i].area;
break;
}
}
} else {
visfamily[x] = 1;
family[cnt].id = i;
family[cnt].totalhousenum = people[i].housenum;
family[cnt].totalarea = people[i].area;
family[cnt].num = 1;
cnt++;
}
}
}
sort(family, family+cnt, cmp);
cout << cnt << endl;
for(int i = 0; i < cnt; i++) {
printf("%.04d %d %.3f %.3f\n", family[i].id, family[i].num, 1.0*family[i].totalhousenum / family[i].num, 1.0*family[i].totalarea / family[i].num);
}
return 0;
}