#include<bits/stdc++.h>
using namespace std;
struct ghj{
__int128 sum,a,b;
};
__int128 n,m,t[400005],s[400005],x,k;
vector<__int128> g[400005];
void bfs(__int128 x){
queue<ghj> q;
q.push({x,1,1});
while(q.size()){
ghj u=q.front();
q.pop();
if(g[u.sum].size()==0){
if(t[u.sum]==0){
t[u.sum]=u.a;
s[u.sum]=u.b;
}
else{
int vv=u.b*s[u.sum]/__gcd(u.b,s[u.sum]);
t[u.sum]=vv/s[u.sum]*t[u.sum]+u.a*vv/u.b;
s[u.sum]=vv;
}
}
for(int i=0;i<g[u.sum].size();i++)
q.push({g[u.sum][i],1,g[u.sum].size()*u.b});
}
}
inline void read(__int128 &s){
s=0;
char c=' ';
while(c>'9'||c<'0') c=getchar();
while(c>='0'&&c<='9'){
s=s*10+c-'0';
c=getchar();
}
}
void write(__int128 x){
if(x>9)write(x/10);
putchar(x%10+'0');
}
signed main(){
read(n),read(m);
for(__int128 i=1;i<=n;i++){
read(x);
while(x--){
read(k);
g[i].push_back(k);
}
}
for(__int128 i=1;i<=m;i++) bfs(i);
for(__int128 i=1;i<=n;i++)
if(g[i].size()==0){
write(t[i]/__gcd(t[i],s[i]));
cout<<" ";
write(s[i]/__gcd(t[i],s[i]));
puts("");
}
}
快读快写都加了,int128也开了,就是不知道哪里错了,各位dalao帮忙看看