program subjects;
const
MAXN = 100000;
MAXM = 1000;
var
M, N, P, i, j, h: LongInt;
K : Array[0..MAXN-1] of LongInt;
materia : Array[1..MAXM] of boolean;
S : Array[0..MAXN-1] of Array[0..5] of LongInt;
ans : Array[0..MAXM-1] of Array[0..1] of LongInt;
coppie : Array[1..MAXM,1..MAXM] of LongInt;
begin
{
uncomment the two following lines if you want to read/write from files
assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);
}
ReadLn(N, M);
for i:=1 to M do materia[i]:=false;
for i := 0 to N - 1 do
begin
Read(K[i]);
for j := 0 to K[i] - 1 do
begin
Read(S[i][j]);
materia[S[i][j]]:=true;
end;
end;
for i:=1 to M do
for j:=1 to M do coppie[i,j]:=0;
P:=0;
for i:=0 to N-1 do
begin
if K[i]>=1 then
begin
for j:=0 to K[i]-1 do
for h:= j+1 to K[i]-1 do
begin
coppie[S[i][j],S[i][h]]:=coppie[S[i][j],S[i][h]]+1;
coppie[S[i][h],S[i][j]]:=coppie[S[i][h],S[i][j]]+1;
end;
end;
end;
for i:=1 to M do
for j:= 1 to M do
if (coppie[i,j]=0) and (i<j) then
begin
P:=P+1;
ans[P][1]:=i; ans[P][2]:=j;
end;
WriteLn(P);
for i := 1 to P do
begin
for j := 1 to 2 do
Write(ans[i][j], ' ');
WriteLn();
end;
end.
cHJvZ3JhbSBzdWJqZWN0czsKCmNvbnN0CiAgICBNQVhOID0gMTAwMDAwOwogICAgTUFYTSA9IDEwMDA7Cgp2YXIKICAgIE0sIE4sIFAsIGksIGosIGg6IExvbmdJbnQ7CiAgICBLICAgICAgICAgICAgIDogQXJyYXlbMC4uTUFYTi0xXSBvZiBMb25nSW50OwogICAgbWF0ZXJpYSAgICAgICA6IEFycmF5WzEuLk1BWE1dIG9mIGJvb2xlYW47CiAgICBTICAgICAgICAgICAgIDogQXJyYXlbMC4uTUFYTi0xXSBvZiBBcnJheVswLi41XSBvZiBMb25nSW50OwogICAgYW5zICAgICAgICAgICA6IEFycmF5WzAuLk1BWE0tMV0gb2YgQXJyYXlbMC4uMV0gb2YgTG9uZ0ludDsKICAgIGNvcHBpZSAgICAgICAgOiBBcnJheVsxLi5NQVhNLDEuLk1BWE1dIG9mIExvbmdJbnQ7CiAgICAKICAgIApiZWdpbgp7CiAgICB1bmNvbW1lbnQgdGhlIHR3byBmb2xsb3dpbmcgbGluZXMgaWYgeW91IHdhbnQgdG8gcmVhZC93cml0ZSBmcm9tIGZpbGVzCiAgICBhc3NpZ24oaW5wdXQsICAnaW5wdXQudHh0Jyk7ICByZXNldChpbnB1dCk7CiAgICBhc3NpZ24ob3V0cHV0LCAnb3V0cHV0LnR4dCcpOyByZXdyaXRlKG91dHB1dCk7Cn0KCiAgICBSZWFkTG4oTiwgTSk7CgogICAgZm9yIGk6PTEgdG8gTSBkbyBtYXRlcmlhW2ldOj1mYWxzZTsKICAgIAogICAgZm9yIGkgOj0gMCB0byBOIC0gMSBkbyAKICAgIGJlZ2luICAgICAgICAKICAgICAgICBSZWFkKEtbaV0pOwogICAgICAgIGZvciBqIDo9IDAgdG8gS1tpXSAtIDEgZG8KICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgUmVhZChTW2ldW2pdKTsKICAgICAgICAgICAgICAgIG1hdGVyaWFbU1tpXVtqXV06PXRydWU7CiAgICAgICAgICAgICAgZW5kOyAgCiAgICBlbmQ7CiAgICBmb3IgaTo9MSB0byBNIGRvCiAgICAgICAgICBmb3Igajo9MSB0byBNIGRvIGNvcHBpZVtpLGpdOj0wOwogICAgUDo9MDsgICAgICAKICAgIGZvciBpOj0wIHRvIE4tMSBkbwogICAgICAgICBiZWdpbgogICAgICAgICAgICBpZiBLW2ldPj0xIHRoZW4gCiAgICAgICAgICAgICAgYmVnaW4gCiAgICAgICAgICAgICAgICAgZm9yIGo6PTAgdG8gS1tpXS0xIGRvIAogICAgICAgICAgICAgICAgICAgIGZvciBoOj0gaisxIHRvIEtbaV0tMSBkbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29wcGllW1NbaV1bal0sU1tpXVtoXV06PWNvcHBpZVtTW2ldW2pdLFNbaV1baF1dKzE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29wcGllW1NbaV1baF0sU1tpXVtqXV06PWNvcHBpZVtTW2ldW2hdLFNbaV1bal1dKzE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ7ICAKICAgICAgICAgICAgIGVuZDsKICAgICAgICAgZW5kOyAKICAgICAgCiAgIGZvciBpOj0xIHRvIE0gZG8KICAgICAgIGZvciBqOj0gMSB0byAgTSBkbwogICAgICAgICAgICBpZiAoY29wcGllW2ksal09MCkgYW5kIChpPGopICB0aGVuIAogICAgICAgICAgICAgICAgICAgICAgYmVnaW4gIAogICAgICAgICAgICAgICAgICAgICAgICBQOj1QKzE7CiAgICAgICAgICAgICAgICAgICAgICAgIGFuc1tQXVsxXTo9aTsgYW5zW1BdWzJdOj1qOwogICAgICAgICAgICAgICAgICAgICAgZW5kOyAgCiAgICAgICAgCiAgICBXcml0ZUxuKFApOwogICAgZm9yIGkgOj0gMSB0byBQIGRvIAogICAgYmVnaW4KICAgICAgICBmb3IgaiA6PSAxIHRvIDIgZG8KICAgICAgICAgICAgV3JpdGUoYW5zW2ldW2pdLCAnICcpOwogICAgICAgIFdyaXRlTG4oKTsKICAgIGVuZDsKZW5kLgo=