#include <bits/stdc++.h>
using namespace std;
long long numOfSubsequences(string s) {
int n = s.length();
if(n == 1) return 0;
int l = 0, c = 0, t= 0, lc = 0, ct = 0, lct = 0;
vector<int> prefixL(n);
vector<int> suffixT(n);
for (int i = 0; i < n; i++){
if(s[i] == 'L') {
l++;
}
if(s[i] == 'C'){
lc += l;
c++;
}
if(s[i] == 'T'){
lct += lc;
ct += c;
}
prefixL[i] = l;
}
for (int j = n-1; j >= 0; j--){
if(s[j] == 'T') t++;
suffixT[j] = t;
}
// Case 1 -Inserting 'L' at the front
// ans = old count of "LCT" + total "CT" in the string.
int ans1 = lct + ct;
// Case 2 - Insering 'T' at the end
// ans = old count of "LCT" + total "LC" in the string.
int ans2 = lct + lc;
int max1 = max(ans1, ans2);
// Case 3 - Inserting 'C' at every position to maximize the count of "LCT"
// Hence there is no need to insert 'C' at first and the end.
int maxc = 0;
for (int k = 0; k < n-1; k++){
int temp = prefixL[k] * suffixT[k+1];
maxc = max(maxc, temp);
}
int ans3 = lct + maxc;
return max(ans3, max1);
}
int main() {
// your code goes here
string s = "LCLPTTGC";
cout << numOfSubsequences(s);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpsb25nIGxvbmcgbnVtT2ZTdWJzZXF1ZW5jZXMoc3RyaW5nIHMpIHsKICAgICAgICBpbnQgbiA9IHMubGVuZ3RoKCk7CiAgICAgICAgaWYobiA9PSAxKSByZXR1cm4gMDsKICAgIAogICAgICAgIGludCBsID0gMCwgYyA9IDAsIHQ9IDAsIGxjID0gMCwgY3QgPSAwLCBsY3QgPSAwOwogICAgICAgIHZlY3RvcjxpbnQ+IHByZWZpeEwobik7CiAgICAgICAgdmVjdG9yPGludD4gc3VmZml4VChuKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKyl7CiAgICAgICAgCWlmKHNbaV0gPT0gJ0wnKSB7CiAgICAgICAgCQlsKys7CiAgICAgICAgCX0KICAgICAgICAJaWYoc1tpXSA9PSAnQycpewogICAgICAgIAkJbGMgKz0gbDsKICAgICAgICAJCWMrKzsKICAgICAgICAJfQogICAgCQogICAgICAgIAlpZihzW2ldID09ICdUJyl7CiAgICAgICAgCQlsY3QgKz0gbGM7CiAgICAgICAgCQljdCArPSBjOwogICAgICAgIAl9CiAgICAJCiAgICAgICAgCXByZWZpeExbaV0gPSBsOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICBmb3IgKGludCBqID0gbi0xOyBqID49IDA7IGotLSl7CiAgICAgICAgCWlmKHNbal0gPT0gJ1QnKSB0Kys7CiAgICAgICAgCXN1ZmZpeFRbal0gPSB0OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIC8vIENhc2UgMSAtSW5zZXJ0aW5nICdMJyBhdCB0aGUgZnJvbnQKICAgICAgICAvLyBhbnMgPSBvbGQgY291bnQgb2YgIkxDVCIgKyB0b3RhbCAiQ1QiIGluIHRoZSBzdHJpbmcuCiAgICAgICAgaW50IGFuczEgPSBsY3QgKyBjdDsKICAgICAgICAKICAgIAogICAgICAgIC8vIENhc2UgMiAtIEluc2VyaW5nICdUJyBhdCB0aGUgZW5kCiAgICAgICAgLy8gYW5zID0gb2xkIGNvdW50IG9mICJMQ1QiICsgdG90YWwgIkxDIiBpbiB0aGUgc3RyaW5nLgogICAgICAgIGludCBhbnMyID0gbGN0ICsgbGM7CiAgICAgICAgCiAgICAKICAgICAgICBpbnQgbWF4MSA9IG1heChhbnMxLCBhbnMyKTsKICAgIAkKICAgICAgICAvLyBDYXNlIDMgLSBJbnNlcnRpbmcgJ0MnIGF0IGV2ZXJ5IHBvc2l0aW9uIHRvIG1heGltaXplIHRoZSBjb3VudCBvZiAiTENUIgogICAgICAgIC8vIEhlbmNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gaW5zZXJ0ICdDJyBhdCBmaXJzdCBhbmQgdGhlIGVuZC4KICAgICAgICBpbnQgbWF4YyA9IDA7CiAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBuLTE7IGsrKyl7CiAgICAgICAgCWludCB0ZW1wID0gcHJlZml4TFtrXSAqIHN1ZmZpeFRbaysxXTsKICAgICAgICAJbWF4YyA9IG1heChtYXhjLCB0ZW1wKTsKICAgICAgICB9IAogICAgICAgIAogICAgICAgIGludCBhbnMzID0gbGN0ICsgbWF4YzsKICAgIAogICAgICAgIHJldHVybiBtYXgoYW5zMywgbWF4MSk7CiAgICB9CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCQoJc3RyaW5nIHMgPSAiTENMUFRUR0MiOwoJY291dCA8PCBudW1PZlN1YnNlcXVlbmNlcyhzKTsKCQoJcmV0dXJuIDA7Cn0=