program subjects;
const
MAXN = 100000;
MAXM = 1000;
var
M, N, P, i, j, h: LongInt;
K : Array[0..MAXN-1] of LongInt;
S : Array[0..MAXN-1] of Array[0..5] of LongInt;
ans : Array[1..MAXM] of Array[1..2] of LongInt;
coppie : Array[1..MAXM,1..MAXM] of LongInt;
materia : Array[1..MAXM] of boolean;
begin
(*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
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;
for i:=1 to M do
begin
for j:=1 to M do write (coppie[i][j],' ');
writeln;
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.
cHJvZ3JhbSBzdWJqZWN0czsKCmNvbnN0CiAgICBNQVhOID0gMTAwMDAwOwogICAgTUFYTSA9IDEwMDA7Cgp2YXIKICAgIE0sIE4sIFAsIGksIGosIGg6IExvbmdJbnQ7CiAgICBLICAgICAgICAgICAgIDogQXJyYXlbMC4uTUFYTi0xXSBvZiBMb25nSW50OwogICAgUyAgICAgICAgICAgICA6IEFycmF5WzAuLk1BWE4tMV0gb2YgQXJyYXlbMC4uNV0gb2YgTG9uZ0ludDsKICAgIGFucyAgICAgICAgICAgOiBBcnJheVsxLi5NQVhNXSBvZiBBcnJheVsxLi4yXSBvZiBMb25nSW50OwogICAgY29wcGllICAgICAgICA6IEFycmF5WzEuLk1BWE0sMS4uTUFYTV0gb2YgTG9uZ0ludDsKICAgIG1hdGVyaWEgICAgICAgOiBBcnJheVsxLi5NQVhNXSBvZiBib29sZWFuOwogICAgCmJlZ2luCiAgICAoKmFzc2lnbihpbnB1dCwgICdpbnB1dC50eHQnKTsgIHJlc2V0KGlucHV0KTsKICAgIGFzc2lnbihvdXRwdXQsICdvdXRwdXQudHh0Jyk7IHJld3JpdGUob3V0cHV0KTsqKQoKICAgIFJlYWRMbihOLCBNKTsKICAgIAogICAgZm9yIGk6PTEgdG8gTSBkbyBtYXRlcmlhW2ldOj1mYWxzZTsKCiAgICBmb3IgaSA6PSAwIHRvIE4gLSAxIGRvIAogICAgYmVnaW4gICAgICAgIAogICAgICAgIFJlYWQoS1tpXSk7CiAgICAgICAgZm9yIGogOj0gMCB0byBLW2ldLTEgIGRvCiAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgUmVhZChTW2ldW2pdKTsKICAgICAgICAgICAgICBtYXRlcmlhW1NbaV1bal1dOj10cnVlOwogICAgICAgICAgICBlbmQ7ICAKICAgICAgIAogICAgZW5kOwogIAogICAgZm9yIGk6PTEgdG8gTSBkbwogICAgICAgICAgZm9yIGo6PTEgdG8gTSBkbyBjb3BwaWVbaSxqXTo9MDsKICAgIFA6PTA7ICAgICAgCiAgICBmb3IgaTo9MCB0byBOLTEgZG8KICAgICAgICAgYmVnaW4KICAgICAgICAgICAgZm9yIGo6PTAgdG8gS1tpXS0xIGRvIAogICAgICAgICAgICAgICAgICAgIGZvciBoOj0gaisxIHRvIEtbaV0tMSBkbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29wcGllW1NbaV1bal0sU1tpXVtoXV06PWNvcHBpZVtTW2ldW2pdLFNbaV1baF1dKzE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29wcGllW1NbaV1baF0sU1tpXVtqXV06PWNvcHBpZVtTW2ldW2hdLFNbaV1bal1dKzE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ7ICAKICAgICAgICAgZW5kOyAKCiAgZm9yIGk6PTEgdG8gTSBkbwogICAgICAgICAgYmVnaW4KICAgICAgICAgICBmb3Igajo9MSB0byBNIGRvIHdyaXRlIChjb3BwaWVbaV1bal0sJyAnKTsKICAgICAgICAgICB3cml0ZWxuOwogICAgICAgICAgIGVuZDsgCiAgIGZvciBpOj0xIHRvIE0gZG8KICAgICAgIGZvciBqOj0gMSB0byAgTSBkbwogICAgICAgICAgICBpZiAoY29wcGllW2ksal09MCkgYW5kIChpPGopICB0aGVuIAogICAgICAgICAgICAgICAgICAgICAgYmVnaW4gIAogICAgICAgICAgICAgICAgICAgICAgICBQOj1QKzE7CiAgICAgICAgICAgICAgICAgICAgICAgIGFuc1tQXVsxXTo9aTsgYW5zW1BdWzJdOj1qOwogICAgICAgICAgICAgICAgICAgICAgZW5kOyAgCiAgICAgICAgCiAgICBXcml0ZUxuKFApOwogICAgZm9yIGkgOj0gMSB0byBQIGRvIAogICAgYmVnaW4KICAgICAgICBmb3IgaiA6PSAxIHRvIDIgZG8KICAgICAgICAgICAgV3JpdGUoYW5zW2ldW2pdLCAnICcpOwogICAgICAgIFdyaXRlTG4oKTsKICAgIGVuZDsKCmVuZC4=