#include <cstdio>
#include <algorithm>
using namespace std;

int N, K, P[16], Pi[16][32];
int a[16], p, display_a[256], display_p = 32;

void add (int val) { a[p ++] = val; }
void remove () { p --; }

void solve ()
{
	int final[256], pf = 0;
	for (int i = 0; i < p; i ++)
	{
		for (int j = 0; j < P[a[i] - 1]; j ++)
		{
			final[pf ++] = Pi[a[i] - 1][j];
		}
	}
	
	sort (final, final + pf);
	if (pf == K)
	{
		bool flag = false;
		for (int i = 0; i < pf && !flag; i ++)
		{
			if (final[i] != i + 1)
			{
				flag = true;
			}
		}
		if (!flag)
		{
			if (p < display_p)
			{
				display_p = p;
				for (int i = 0; i < display_p; i ++)
				{
					//printf ("%d ", a[i]);
					display_a[i] = a[i];
				}
				//printf ("\n");
			}
		}
	}
}

void recurse (int x)
{
	add (x);
	solve ();
	for (x = x + 1; x <= N; x ++)
	{
		recurse (x);
	}
	remove ();
}

void input ()
{
	scanf ("%d %d", &N, &K);

	for (int i = 0; i < N; i ++)
	{
		scanf ("%d", &P[i]);
		for (int j = 0; j < P[i]; j ++)
		{
			scanf ("%d", &Pi[i][j]);
		}
	}
}	

void output ()
{
	printf ("%d\n", display_p);
	for (int i = 0; i < display_p; i ++)
	{
		printf ("%d%c", display_a[i], i < display_p - 1 ? ' ' : '\n');
	}
}
int main ()
{
	input ();
	
	for (int i = 1; i <= N; i ++)
	{
		recurse (i);
	}
	
	output ();
	
	return 0;
}
