#include <iostream>
#include <string>
#include <vector>
#include <cctype>
#include <array>
using namespace std;
int maxx(array<int,26> arr){
int maximum = 0;
for(int i = 0; i < 26; i ++){
if(arr[i] > maximum) maximum = arr[i];
}
return maximum;
}
int countUpperLetters(vector<string> v){
array<int, 26> alphabet = {0};
for(int i = 0; i < v.size(); i++){
for(char c: v[i]){
if (isalpha(c) && isupper(c)) {
alphabet[c-'A']++;
}
}
}
return maxx(alphabet);
}
int countLowerLetters(vector<string> v){
array<int, 26> alphabet = {0};
for(int i = 0; i < v.size(); i++){
for(char c: v[i]){
if (isalpha(c) && islower(c)) {
alphabet[c-'a']++;
}
}
}
return maxx(alphabet);
}
void readInput(vector<string> &odds, vector<string> &evens ) {
string input;
while (getline(cin, input)) {
if (input.empty()) break;
if(input.size() % 2 == 0)
evens.push_back(input);
else
odds.push_back(input);
}
}
int main() {
vector<string> evens;
vector<string> odds;
string input;
while (getline(cin, input)) {
if (input.empty()) break;
if(input.size() % 2 == 0)
evens.push_back(input);
else
odds.push_back(input);
}
cout << countLowerLetters(evens) << " " << countUpperLetters(odds) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPiAKI2luY2x1ZGUgPGNjdHlwZT4KI2luY2x1ZGUgPGFycmF5PiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgoKCgoKaW50IG1heHgoYXJyYXk8aW50LDI2PiBhcnIpewogICAgaW50IG1heGltdW0gPSAwOwogICAgZm9yKGludCBpID0gMDsgaSA8IDI2OyBpICsrKXsKICAgICAgICBpZihhcnJbaV0gPiBtYXhpbXVtKSBtYXhpbXVtID0gYXJyW2ldOwoKICAgIH0KICAgIHJldHVybiBtYXhpbXVtOwoKfQoKCmludCBjb3VudFVwcGVyTGV0dGVycyh2ZWN0b3I8c3RyaW5nPiB2KXsKICAgIGFycmF5PGludCwgMjY+IGFscGhhYmV0ID0gezB9OwogICAgZm9yKGludCBpID0gMDsgaSA8IHYuc2l6ZSgpOyBpKyspewogICAgICAgIGZvcihjaGFyIGM6IHZbaV0pewogICAgICAgICAgICBpZiAoaXNhbHBoYShjKSAmJiBpc3VwcGVyKGMpKSB7IAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIGFscGhhYmV0W2MtJ0EnXSsrOyAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBtYXh4KGFscGhhYmV0KTsKfQoKaW50IGNvdW50TG93ZXJMZXR0ZXJzKHZlY3RvcjxzdHJpbmc+IHYpewogICAgYXJyYXk8aW50LCAyNj4gYWxwaGFiZXQgPSB7MH07CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgdi5zaXplKCk7IGkrKyl7CiAgICAgICAgZm9yKGNoYXIgYzogdltpXSl7CiAgICAgICAgICAgIGlmIChpc2FscGhhKGMpICYmIGlzbG93ZXIoYykpIHsgCiAgICAgICAgICAgICAgICBhbHBoYWJldFtjLSdhJ10rKzsgCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gbWF4eChhbHBoYWJldCk7Cn0KCnZvaWQgcmVhZElucHV0KHZlY3RvcjxzdHJpbmc+ICZvZGRzLCB2ZWN0b3I8c3RyaW5nPiAmZXZlbnMgKSB7CiAgICBzdHJpbmcgaW5wdXQ7CiAgICB3aGlsZSAoZ2V0bGluZShjaW4sIGlucHV0KSkgewogICAgICAgIGlmIChpbnB1dC5lbXB0eSgpKSBicmVhazsKICAgICAgICBpZihpbnB1dC5zaXplKCkgJSAyID09IDApCiAgICAgICAgICAgIGV2ZW5zLnB1c2hfYmFjayhpbnB1dCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICBvZGRzLnB1c2hfYmFjayhpbnB1dCk7CgogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIHZlY3RvcjxzdHJpbmc+IGV2ZW5zOwogICAgdmVjdG9yPHN0cmluZz4gb2RkczsKICAgIHN0cmluZyBpbnB1dDsKICAgIHdoaWxlIChnZXRsaW5lKGNpbiwgaW5wdXQpKSB7CiAgICAgICAgaWYgKGlucHV0LmVtcHR5KCkpIGJyZWFrOwogICAgICAgIGlmKGlucHV0LnNpemUoKSAlIDIgPT0gMCkKICAgICAgICAgICAgZXZlbnMucHVzaF9iYWNrKGlucHV0KTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIG9kZHMucHVzaF9iYWNrKGlucHV0KTsKICAgIH0KCiAgICBjb3V0IDw8IGNvdW50TG93ZXJMZXR0ZXJzKGV2ZW5zKSA8PCAiICIgPDwgY291bnRVcHBlckxldHRlcnMob2RkcykgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==