#include<iostream>
#include<cmath>
#include<algorithm>
#include<iomanip>
#include<climits>
#include<numeric>
#include<set>
#include<sstream>
#include<map>
#include<vector>
#include<string>
using namespace std;
vector<string> split(string haystack, string needle) {
vector<string> result;
int start_pos = 0;
int found_pos = haystack.find(needle, start_pos);
while (found_pos != string::npos) {
int count = found_pos - start_pos;
string token = haystack.substr(start_pos, count);
if (!token.empty()) {
result.push_back(token);
}
start_pos = found_pos + needle.length();
found_pos = haystack.find(needle, start_pos);
}
string token = haystack.substr(start_pos, haystack.length()-start_pos);
if (!token.empty()) {
result.push_back(token);
}
return result;
}
string nameConvert(const string& name) {
const string DELIMITER = " ";
stringstream builder;
auto parts = split(name, DELIMITER);
for (auto part : parts) {
part[0] = toupper(part[0]);
transform(part.begin()+1, part.end(),part.begin()+1, ::tolower);
builder << part << DELIMITER;
}
return builder.str();
}
string dateConvert(const string& date) {
const string DELIMITER = "/";
stringstream builder;
auto parts = split(date, DELIMITER);
builder << setw(2) << setfill('0') << parts[0] << DELIMITER;
builder << setw(2) << setfill('0') << parts[1] << DELIMITER;
builder << parts[2];
return builder.str();
}
int main() {
string s;cin >> s;
string maxResult = "";
maxResult.push_back(s[0]);
string currentResult = "";
currentResult.push_back(s[0]);
for (int i = 1;i < s.size();i++) {
if (s[i] != s[i - 1]) {
currentResult = currentResult + s[i];
}
else {
if (currentResult.size() > maxResult.size()) {
maxResult = currentResult;
}
else if (currentResult.size() == maxResult.size()) {
maxResult = max(maxResult, currentResult);
}
currentResult = "";
currentResult.push_back(s[i]);
}
}
if (currentResult.size() > maxResult.size()) {
maxResult = currentResult;
}
else if (currentResult.size() == maxResult.size()) {
maxResult = max(maxResult, currentResult);
}
cout << maxResult;
}