fork download
  1. program subjects;
  2.  
  3. const
  4. MAXN = 100000;
  5. MAXM = 1000;
  6.  
  7. var
  8. M, N, P, i, j, h: LongInt;
  9. K : Array[0..MAXN-1] of LongInt;
  10. S : Array[0..MAXN-1] of Array[0..5] of LongInt;
  11. ans : Array[1..MAXM] of Array[1..2] of LongInt;
  12. coppie : Array[1..MAXM,1..MAXM] of LongInt;
  13. materia : Array[1..MAXM] of boolean;
  14.  
  15. begin
  16. (*assign(input, 'input.txt'); reset(input);
  17.   assign(output, 'output.txt'); rewrite(output);*)
  18.  
  19. ReadLn(N, M);
  20.  
  21. for i:=1 to M do materia[i]:=false;
  22.  
  23. for i := 0 to N - 1 do
  24. begin
  25. Read(K[i]);
  26. for j := 0 to K[i] - 1 do
  27. begin
  28. Read(S[i][j]);
  29. materia[S[i][j]]:=true;
  30. end;
  31.  
  32. end;
  33. for i:=1 to M do
  34. for j:=1 to M do coppie[i,j]:=0;
  35. P:=0;
  36. for i:=0 to N-1 do
  37. begin
  38. if K[i]>=1 then
  39. begin
  40. for j:=0 to K[i]-1 do
  41. for h:= j+1 to K[i]-1 do
  42. begin
  43. coppie[S[i][j],S[i][h]]:=coppie[S[i][j],S[i][h]]+1;
  44. coppie[S[i][h],S[i][j]]:=coppie[S[i][h],S[i][j]]+1;
  45. end;
  46. end;
  47. end;
  48.  
  49. for i:=1 to M do
  50. for j:= 1 to M do
  51. if (coppie[i,j]=0) and (i<j) and (materia[i]=true) and (materia[j]=true) then
  52. begin
  53. P:=P+1;
  54. ans[P][1]:=i; ans[P][2]:=j;
  55. end;
  56.  
  57. WriteLn(P);
  58. for i := 1 to P do
  59. begin
  60. for j := 1 to 2 do
  61. Write(ans[i][j], ' ');
  62. WriteLn();
  63. end;
  64.  
  65. end.
  66.  
Success #stdin #stdout 0s 5280KB
stdin
3 4
1 1
2 2 3
1 4
stdout
5
1 2 
1 3 
1 4 
2 4 
3 4