比赛的时候骗了分hh
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 15;
typedef long long ll;
map<string,int> mp;
struct node {
string name;
int num;
}ans[N];
string tmp[N];
bool cmp(node a,node b){
if(a.num == b.num)
return a.name < b.name;
return a.num < b.num;
}
int main(){
int n , m;
cin>> n >> m;
string name;
int tot = 0;
getline(cin,name);
for(int i = 0 ; i < n; i++){
getline(cin,name);
if(mp[name] == 0) {
mp[name]++;
tmp[tot++] = name;
}
else mp[name]++;
}
for(int i = 0; i < tot; i++){
ans[i].name = tmp[i];
ans[i].num = mp[tmp[i]];
}
sort(ans,ans+tot,cmp);
cout<<tot<<endl;
for(int i = tot - 1 ; i >= 0; i--){
cout<<ans[i].num << " " << ans[i].name<<endl;
}
}