#include <iostream>
#include <unordered_map>
using namespace std;
bool check(char c)
{
if(c>='0'&&c<='9') return true;
if(c>='A'&&c<='Z') return true;
if(c>='a'&&c<='z') return true;
return false;
}
char exchange(char d)
{
if(d>='A'&&d<='Z')
{
return d+32;
}
return d;
}
int main()
{
string str;
getline(cin,str);
int j;
unordered_map<string,int> hash;
for(int i=0;i<str.size();i++)
{
if(check(str[i]))
{
string word;
j=i;
while(j<str.size()&&check(str[j])){ word+=exchange(str[j++]);}
hash[word]++;
i=j;
}
}
string word;
int cnt=-1;
for(auto item:hash)
{
if(item.second>cnt||(item.second==cnt&&item.first<word))//这个部分是优先级问题,如果出现的次数相同,这个时候选择单词短的,否则选择次数多的。
{
word=item.first;
cnt=item.second;
}
}
cout<<word<<' '<<cnt<<endl;
}
//tolower函数,变成小写;
// unordered_map<string,int> hash;
for(auto item:hash)
{
if(item.second>cnt||(item.second==cnt&&item.first<word))//这个部分是优先级问题,如果出现的次数相同,这个时候选择单词短的,否则选择次数多的。
{
word=item.first;
cnt=item.second;
}
}