// thứ tự từ điển:
// so sánh thứ tự từ điển 2 xâu a, b
// - xâu a có thứ tự từ điển < xâu b nếu thoả 1 trong 2 điều kiện sau:
// + xâu a là tiền tố của xâu b
// + tồn tại một vị trí i nào đó từ trái qua phải mà các kí tự i' < i, a[i'] = b[i'], còn kí tự a[i] < b[i]
// Ví dụ:
// abc < abcde
// aa < abc
// caaaaaaa > bcccccc
// badc < baddakldsjfsakjfslj
// aaabb < aabbb
// aaa < aaaaa
// s = radar
// các xâu con là xâu đối xứng:
// rr
// raar
// ada
// aa
// radar
// thứ tự từ điển nhỏ nhất: a
// cho xâu s có độ dài là n, thì nếu duyệt qua hết tất cả các xâu con của s thì độ phức tạp là bao nhiêu?
// O(2^n)
#include <bits/stdc++.h>
using namespace std;
int n;
string s, ans;
bool isPalindrome(string t) {
int m = t.size();
for (int i = 0; i * 2 < m; i++) {
if (t[i] != t[m - i - 1]) return false;
}
return true;
}
void backtrack(int i, string t) {
if (i == n) {
if (isPalindrome(t)) ans = max(ans, t); // if (ans < t) ans = t;
return;
}
// không chọn s[i]
backtrack(i + 1, t);
// chọn s[i]
backtrack(i + 1, t + s[i]);
}
int main() {
cin >> s;
n = s.size();
// khởi tạo ans = xâu có thứ tự từ điển nhỏ nhất (vì mình đang tìm max) (cũng có nhiều cách cài đặt khác)
ans = "a";
backtrack(0, "");
cout << ans << '\n';
}
Ly8gdGjhu6kgdOG7sSB04burIMSRaeG7g246IAovLyBzbyBzw6FuaCB0aOG7qSB04buxIHThu6sgxJFp4buDbiAyIHjDonUgYSwgYiAKLy8gLSB4w6J1IGEgY8OzIHRo4bupIHThu7EgdOG7qyDEkWnhu4NuIDwgeMOidSBiIG7hur91IHRob+G6oyAxIHRyb25nIDIgxJFp4buBdSBraeG7h24gc2F1OiAKLy8gKyB4w6J1IGEgbMOgIHRp4buBbiB04buRIGPhu6dhIHjDonUgYiAgCi8vICsgdOG7k24gdOG6oWkgbeG7mXQgduG7iyB0csOtIGkgbsOgbyDEkcOzIHThu6sgdHLDoWkgcXVhIHBo4bqjaSBtw6AgY8OhYyBrw60gdOG7sSBpJyA8IGksIGFbaSddID0gYltpJ10sIGPDsm4ga8OtIHThu7EgYVtpXSA8IGJbaV0gCi8vIFbDrSBk4bulOiAKLy8gYWJjIDwgYWJjZGUKCi8vIGFhIDwgYWJjICAKCi8vIGNhYWFhYWFhICA+ICBiY2NjY2NjCgovLyBiYWRjICA8ICBiYWRkYWtsZHNqZnNha2pmc2xqIAoKCi8vIGFhYWJiICA8IGFhYmJiCgovLyBhYWEgPCBhYWFhYQoKLy8gcyA9IHJhZGFyIAovLyBjw6FjIHjDonUgY29uIGzDoCB4w6J1IMSR4buRaSB44bupbmc6IAovLyByciAgCgovLyByYWFyCgovLyBhZGEgCgovLyBhYSAKCi8vIHJhZGFyCgoKLy8gdGjhu6kgdOG7sSB04burIMSRaeG7g24gbmjhu48gbmjhuqV0OiBhIAoKLy8gY2hvIHjDonUgcyBjw7MgxJHhu5kgZMOgaSBsw6AgbiwgdGjDrCBu4bq/dSBkdXnhu4d0IHF1YSBo4bq/dCB04bqldCBj4bqjIGPDoWMgeMOidSBjb24gY+G7p2EgcyB0aMOsIMSR4buZIHBo4bupYyB04bqhcCBsw6AgYmFvIG5oacOqdT8KLy8gTygyXm4pICAKCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOyAKCmludCBuOyAKc3RyaW5nIHMsIGFuczsgCgpib29sIGlzUGFsaW5kcm9tZShzdHJpbmcgdCkgewoJaW50IG0gPSB0LnNpemUoKTsgCglmb3IgKGludCBpID0gMDsgaSAqIDIgPCBtOyBpKyspIHsKCQlpZiAodFtpXSAhPSB0W20gLSBpIC0gMV0pIHJldHVybiBmYWxzZTsgCgl9CglyZXR1cm4gdHJ1ZTsgCn0KCnZvaWQgYmFja3RyYWNrKGludCBpLCBzdHJpbmcgdCkgewoJaWYgKGkgPT0gbikgewoJCWlmIChpc1BhbGluZHJvbWUodCkpIGFucyA9IG1heChhbnMsIHQpOyAvLyBpZiAoYW5zIDwgdCkgYW5zID0gdDsgCgkJcmV0dXJuOyAKCX0KCgkvLyBraMO0bmcgY2jhu41uIHNbaV0KCWJhY2t0cmFjayhpICsgMSwgdCk7CgoJLy8gY2jhu41uIHNbaV0KCWJhY2t0cmFjayhpICsgMSwgdCArIHNbaV0pOyAgCn0KCmludCBtYWluKCkgewoJY2luID4+IHM7ICAKCW4gPSBzLnNpemUoKTsgIAoKCS8vIGto4bufaSB04bqhbyBhbnMgPSB4w6J1IGPDsyB0aOG7qSB04buxIHThu6sgxJFp4buDbiBuaOG7jyBuaOG6pXQgKHbDrCBtw6xuaCDEkWFuZyB0w6xtIG1heCkgKGPFqW5nIGPDsyBuaGnhu4F1IGPDoWNoIGPDoGkgxJHhurd0IGtow6FjKQoJYW5zID0gImEiOyAgIAoJYmFja3RyYWNrKDAsICIiKTsKCWNvdXQgPDwgYW5zIDw8ICdcbic7ICAKfQ==