#include<iostream>
#include<map>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
  int n,f;
  int num=0;
  map<string,int>mp;
  int con[1001][1001]={};
  cin >> n >> f;
  string str[1001];
  for(int i=0;i<n;i++){
    int m;
    cin >> m;
    vector<string>it(m);
    
    for(int j=0;j<m;j++){
	cin >> it[j];	
    	if(!mp[it[j]]){
	  num++;
	  mp[it[j]]=num;
	  str[num]=it[j];
	}
    }
    for(int j=0;j<m;j++){
      for(int k=m-1;k>=0;k--){
	if(j==k)continue;
	if(it[j]>it[k])continue;
	con[mp[it[j]]][mp[it[k]]]++;
      }
    }
  }
  vector< pair<string,string> > ans;
  pair<string,string>abuf;
  int anum=0;
  for(int i=1;i<=num;i++){
    for(int j=0;j<=num;j++){
      if(con[i][j]>=f){
	abuf.first=str[i];
	abuf.second=str[j];
	ans.push_back(abuf);
	anum++;
      }
    }
  }
  sort(ans.begin(),ans.end());
  cout << anum << endl;
  for(int i=0;i<anum;i++){
    cout << ans[i].first << " "<< ans[i].second<<endl;
  }
  return 0;
}