#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 150;
struct A{
char asc;
int num;
}a[maxn];
int sum[maxn];
bool cmp(const A& a , const A& b){
if(a.num != b.num){
return a.num < b.num;
}
return a.asc > b.asc;
}
int main(){
char str[1010];
int counter = 0;
while(gets(str)){//注意不要写成scanf("%s",str),那样会WA,因为这道题需要处理空格
if(counter++){
printf("\n");
}
memset(a,0,sizeof(a));
int len = strlen(str);
int i;
for(i = 0 ; i < len ; ++i){//使用结构体来计算一个字符出现了多少次
a[str[i]].asc = str[i];
a[str[i]].num++;
}
sort(a,a+maxn,cmp);
for(i = 0 ; i < maxn ; ++i){
if(a[i].num != 0){
printf("%d %d\n",a[i].asc,a[i].num);
}
}
}
return 0;
}