#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
vector<int>code[10000];
typedef struct
{
int num;
vector<int>v;
}cc;
bool cmp(cc e,cc r)
{
if(e.num!=r.num)return e.num>r.num;
else
for(int i=0;i<e.v.size();i++)
{
if(e.v[i]!=r.v[i])return e.v[i]<r.v[i];
}
}
vector<cc>e;
int main()
{
int n,m;cin>>n>>m;
map<vector<int>,int>t;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
int a;cin>>a;
code[i].push_back(a);
}
t[code[i]]++;
}
cout<<t.size()<<endl;
for(auto c:t)
{
cc k;
k.v=c.first;
k.num=c.second;
e.push_back(k);
}
sort(e.begin(),e.end(),cmp);
for(int i=0;i<e.size();i++)
{
cout<<e[i].num;
for(int j=0;j<e[i].v.size();j++)
{
cout<<" "<<e[i].v[j];
}
cout<<endl;
}
}