#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
long long numOfSubsequences(string s) {
// Count number of "LCT" subsequences
long long l = 0;
long long lc = 0;
long long lct = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == 'L') {
l++;
}
if (s[i] == 'C') {
lc = lc + l;
}
if (s[i] == 'T') {
lct = lct + lc;
}
}
// Count number of "CT" subsequences
long long ct = 0;
long long c = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == 'C') {
c++;
}
if (s[i] == 'T') {
ct = ct + c;
}
}
// Insert L
long long insertl = lct + ct;
// Insert T
long long insertt = lct + lc;
// Insert C
long long insertc = 0;
long long leftL = 0;
long long totalT = 0;
// Count total T
for (int i = 0; i < s.size(); i++) {
if (s[i] == 'T') {
totalT++;
}
}
long long rightT = totalT;
// Try inserting C at every position
for (int i = 0; i < s.size(); i++) {
insertc = max(insertc, leftL * rightT);
if (s[i] == 'L') {
leftL++;
}
if (s[i] == 'T') {
rightT--;
}
}
// Insert C at the end
insertc = max(insertc, leftL * rightT);
// Maximum answer
return max({
insertl,
insertt,
lct + insertc,
lct
});
}
int main() {
string s;
cin >> s;
cout << numOfSubsequences(s) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbG9uZyBsb25nIG51bU9mU3Vic2VxdWVuY2VzKHN0cmluZyBzKSB7CgogICAgLy8gQ291bnQgbnVtYmVyIG9mICJMQ1QiIHN1YnNlcXVlbmNlcwogICAgbG9uZyBsb25nIGwgPSAwOwogICAgbG9uZyBsb25nIGxjID0gMDsKICAgIGxvbmcgbG9uZyBsY3QgPSAwOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5zaXplKCk7IGkrKykgewoKICAgICAgICBpZiAoc1tpXSA9PSAnTCcpIHsKICAgICAgICAgICAgbCsrOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNbaV0gPT0gJ0MnKSB7CiAgICAgICAgICAgIGxjID0gbGMgKyBsOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNbaV0gPT0gJ1QnKSB7CiAgICAgICAgICAgIGxjdCA9IGxjdCArIGxjOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBDb3VudCBudW1iZXIgb2YgIkNUIiBzdWJzZXF1ZW5jZXMKICAgIGxvbmcgbG9uZyBjdCA9IDA7CiAgICBsb25nIGxvbmcgYyA9IDA7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLnNpemUoKTsgaSsrKSB7CgogICAgICAgIGlmIChzW2ldID09ICdDJykgewogICAgICAgICAgICBjKys7CiAgICAgICAgfQoKICAgICAgICBpZiAoc1tpXSA9PSAnVCcpIHsKICAgICAgICAgICAgY3QgPSBjdCArIGM7CiAgICAgICAgfQogICAgfQoKICAgIC8vIEluc2VydCBMCiAgICBsb25nIGxvbmcgaW5zZXJ0bCA9IGxjdCArIGN0OwoKICAgIC8vIEluc2VydCBUCiAgICBsb25nIGxvbmcgaW5zZXJ0dCA9IGxjdCArIGxjOwoKICAgIC8vIEluc2VydCBDCiAgICBsb25nIGxvbmcgaW5zZXJ0YyA9IDA7CgogICAgbG9uZyBsb25nIGxlZnRMID0gMDsKICAgIGxvbmcgbG9uZyB0b3RhbFQgPSAwOwoKICAgIC8vIENvdW50IHRvdGFsIFQKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5zaXplKCk7IGkrKykgewogICAgICAgIGlmIChzW2ldID09ICdUJykgewogICAgICAgICAgICB0b3RhbFQrKzsKICAgICAgICB9CiAgICB9CgogICAgbG9uZyBsb25nIHJpZ2h0VCA9IHRvdGFsVDsKCiAgICAvLyBUcnkgaW5zZXJ0aW5nIEMgYXQgZXZlcnkgcG9zaXRpb24KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5zaXplKCk7IGkrKykgewoKICAgICAgICBpbnNlcnRjID0gbWF4KGluc2VydGMsIGxlZnRMICogcmlnaHRUKTsKCiAgICAgICAgaWYgKHNbaV0gPT0gJ0wnKSB7CiAgICAgICAgICAgIGxlZnRMKys7CiAgICAgICAgfQoKICAgICAgICBpZiAoc1tpXSA9PSAnVCcpIHsKICAgICAgICAgICAgcmlnaHRULS07CiAgICAgICAgfQogICAgfQoKICAgIC8vIEluc2VydCBDIGF0IHRoZSBlbmQKICAgIGluc2VydGMgPSBtYXgoaW5zZXJ0YywgbGVmdEwgKiByaWdodFQpOwoKICAgIC8vIE1heGltdW0gYW5zd2VyCiAgICByZXR1cm4gbWF4KHsKICAgICAgICBpbnNlcnRsLAogICAgICAgIGluc2VydHQsCiAgICAgICAgbGN0ICsgaW5zZXJ0YywKICAgICAgICBsY3QKICAgIH0pOwp9CgppbnQgbWFpbigpIHsKCiAgICBzdHJpbmcgczsKICAgIGNpbiA+PiBzOwoKICAgIGNvdXQgPDwgbnVtT2ZTdWJzZXF1ZW5jZXMocykgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==