#include <iostream>
using namespace std;

int n,k,sus[11][21],z[11];
bool ms[21];

void doit (int in)
{
	int i;
	for (i=1;i<=z[in];i++)
	{
		ms[sus[in][i]]=true;
	}
}
void falseitpls(bool a[])
{
	int i;
	for (i=0;i<=20;i++)
	{
		a[i]=false;
	}
}

bool done(void)
{
	int i;
	for (i=1;i<=k;i++)
	{
		if (ms==false)
		return false;
	}
	return true;
}

void check(void)
{
	int i,j,br=0;
	for (i=1;i<=n;i++)
	{
		br=0;
		for (j=1;j<=z[i];j++)
		{
			if (  ms[ sus[i][j] ]==false  )
			{
				br++;
			}
		}
		sus[i][0]=br;
	}
}

int getbestone(void)
{
	int i,max=-1,maxi;
	for (i=1;i<=n;i++)
	{
		if (sus[i][0]>max)
		{ 
			 max=sus[i][0];
			 maxi=i;
		}
	}
	return maxi;
}

void copy(int a[],int b[])
{
	int i;
	for (i=1;i<=10;i++)
	{
		b[i]=a[i];
	}
}

bool better(int a[],int b[])
{
	int mini1,mini2,af[11],bf[11],min1=99,min2=99,i;
	
	copy(a,af);
	copy(b,bf);
	while (1==1)
	{
	
	  for (i=1;i<=n;i++)
	  {
	  	if (af[i]<min1)
	  	  {
	  	  	min1=af[i];
	  	  	mini1=i;
	  	  }
		if (bf[i]<min2)
		  {
		  	min2=bf[i];
		  	mini2=i;
		  }
	  }
	  if (min1<min2)
	  return true;
	  else if (min1>min2)
	  return false;
	  else if(min1==min2)
	  {
	  	af[mini1]=99;
	  	bf[mini2]=99;
	  }
	  
	}
}

int main()
{
	int i,j;
	int l=0,uch[11],maxuch[11];
	int r,maxl=99;
	cin>>n>>k;
	
	for (i=1;i<=n;i++)
	{
		cin>>z[i];
		for (j=1;j<=z[i];j++)
		{
			cin>>sus[i][j];
		}
	}
	
	for (i=1;i<=n;i++)
	{
		falseitpls(ms);
		doit(i);
		l++;
		uch[l]=i;
		while (!done())
		{
		  check();
		  r=getbestone();
		  doit(r);
		  l++;
		  uch[l]=r;
		}
		if (l<maxl)
		{
		  copy(uch,maxuch);
		  maxl=l;
		}
		else if ( l==maxl && better(uch,maxuch) )
		{
			copy(uch,maxuch);
		}
	}
	cout<<maxl<<endl;
	for (i=1;i<=maxl;i++)
	{
		cout<<maxuch[i]<<" ";
	}
	cout<<endl;
}