# include<bits/stdc++.h>
//# pragma comment (linker, "/stack: 12345678")
# define IDSZ 310
using namespace std;
static int P , maps[1301][1301],GRP[1301][1301];
static int mark[IDSZ];
int solve(int ind,int ans,int K,int N,int visited[1301])
{
for (int i=0;i<N;i++)
{
if (GRP[ind][i] >= K && !visited[i])
{
visited[i] = 1;
return solve(i,ans+1,K,N,visited);
}
}
return ans;
}
int main(void)
{
int N , K;
memset(mark,0,sizeof(IDSZ));
scanf("%d%d",&N,&K);
for (int i=0;i<N;i++)
{
memset(GRP,0,N+1);
scanf("%d",&P);
maps[i][0] = P;
for (int j=1;j<=P;j++)
scanf("%d",&maps[i][j]);
}
for (int i=0;i<maps[0][0];i++)
mark[maps[0][i]] = 1;
for (int i=0;i<N;i++)
{
for (int j=1;j<=maps[i][0];j++)
mark[maps[i][j]] = 1;
int temp = 0,j;
for (j=i+1;j<N;j++)
{
temp = 0;
for (int k=1;k<=maps[j][0];k++)
if (mark[maps[j][k]])
temp += 1;
GRP[i][j] = temp;
GRP[j][i] = temp;
}
memset(mark,0,sizeof(IDSZ));
for (int i=0;i<maps[0][0];i++)
mark[maps[0][i]] = 1;
}
int ans=1;
for (int i=0;i<N;i++)
{
for (int j=0;j<N;j++)
printf("%d ",GRP[i][j]);
printf("\n");
}
//for (int i=0;i<N;i++)
// {
int visited[1301] = {0};
memset(visited,0,sizeof(visited));
int temp=1;
int k = solve(0,temp,K,N,visited);
if (k > ans)
ans = k;
// }
printf("%d",ans);
return (0);
}
IyBpbmNsdWRlPGJpdHMvc3RkYysrLmg+Ci8vIyBwcmFnbWEgY29tbWVudCAobGlua2VyLCAiL3N0YWNrOiAxMjM0NTY3OCIpCiMgZGVmaW5lIElEU1ogMzEwCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdGF0aWMgaW50IFAgLCBtYXBzWzEzMDFdWzEzMDFdLEdSUFsxMzAxXVsxMzAxXTsKc3RhdGljIGludCBtYXJrW0lEU1pdOwoKaW50IHNvbHZlKGludCBpbmQsaW50IGFucyxpbnQgSyxpbnQgTixpbnQgdmlzaXRlZFsxMzAxXSkKewoJZm9yIChpbnQgaT0wO2k8TjtpKyspCgl7CgkJaWYgKEdSUFtpbmRdW2ldID49IEsgJiYgIXZpc2l0ZWRbaV0pCgkJewoJCQl2aXNpdGVkW2ldID0gMTsKCQkJcmV0dXJuIHNvbHZlKGksYW5zKzEsSyxOLHZpc2l0ZWQpOwoJCX0KCX0KCXJldHVybiBhbnM7CgkKfQppbnQgbWFpbih2b2lkKQp7CglpbnQgTiAsIEs7CgltZW1zZXQobWFyaywwLHNpemVvZihJRFNaKSk7CglzY2FuZigiJWQlZCIsJk4sJkspOwoJZm9yIChpbnQgaT0wO2k8TjtpKyspCgl7CgkJbWVtc2V0KEdSUCwwLE4rMSk7CgkJc2NhbmYoIiVkIiwmUCk7CgkJbWFwc1tpXVswXSA9IFA7CgkJZm9yIChpbnQgaj0xO2o8PVA7aisrKQoJCQlzY2FuZigiJWQiLCZtYXBzW2ldW2pdKTsKCX0KCWZvciAoaW50IGk9MDtpPG1hcHNbMF1bMF07aSsrKQoJCW1hcmtbbWFwc1swXVtpXV0gPSAxOwoJZm9yIChpbnQgaT0wO2k8TjtpKyspCgl7CgkJZm9yIChpbnQgaj0xO2o8PW1hcHNbaV1bMF07aisrKQoJCQltYXJrW21hcHNbaV1bal1dID0gMTsKCQlpbnQgdGVtcCA9IDAsajsKCQlmb3IgKGo9aSsxO2o8TjtqKyspCgkJewoJCQl0ZW1wID0gMDsKCQkJZm9yIChpbnQgaz0xO2s8PW1hcHNbal1bMF07aysrKQoJCQkJaWYgKG1hcmtbbWFwc1tqXVtrXV0pCgkJCQkJdGVtcCArPSAxOwoJCQlHUlBbaV1bal0gPSB0ZW1wOwoJCQlHUlBbal1baV0gPSB0ZW1wOwoJCX0KCQltZW1zZXQobWFyaywwLHNpemVvZihJRFNaKSk7CgkJZm9yIChpbnQgaT0wO2k8bWFwc1swXVswXTtpKyspCgkJbWFya1ttYXBzWzBdW2ldXSA9IDE7Cgl9CglpbnQgYW5zPTE7Cglmb3IgKGludCBpPTA7aTxOO2krKykKICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKGludCBqPTA7ajxOO2orKykKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlZCAiLEdSUFtpXVtqXSk7CiAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgfQoJLy9mb3IgKGludCBpPTA7aTxOO2krKykKLy8JewoJCWludCB2aXNpdGVkWzEzMDFdID0gezB9OwoJCW1lbXNldCh2aXNpdGVkLDAsc2l6ZW9mKHZpc2l0ZWQpKTsKCQlpbnQgdGVtcD0xOwoJCWludCBrID0gc29sdmUoMCx0ZW1wLEssTix2aXNpdGVkKTsKCQlpZiAoayA+IGFucykKCQkJYW5zID0gazsKLy8JfQoJcHJpbnRmKCIlZCIsYW5zKTsKCXJldHVybiAoMCk7Cn0=