#include #include #include #include using namespace std; using namespace atcoder; using ll = long long; using lb = long double; using P = pair; using T = tuple; using vll = vector; using vb = vector; using vvll = vector>; using vP = vector

; using Graph = vector>; using WGraph = vector>>; // コスト、頂点番号の順 using mint = modint998244353; //using mint = long double; #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) mt19937_64 rng(58); long double PI = 3.14159265358979; const ll LLMAX = 9223372036854775807; const ll INF = 1e18; vector di = {-1, 0, 1, 0}; // 上左下右 vector dj = {0, -1, 0, 1}; template inline bool chmax(T &a, T b) { return ((a < b) ? (a = b, true) : (false)); } template inline bool chmin(T &a, T b) { return ((a > b) ? (a = b, true) : (false)); } int main() { string s; cin >> s; ll n = s.size(); vector bino(n + 1); bino[0] = 1; mint p = 1 + 2; rep (i, n) bino[i + 1] = bino[i] * p; mint ans = 0; ll cntM = 0; rep (i, n) { if (s[i] == 'M') cntM++; else { ans += bino[cntM]; } } cout << ans.val() << endl; return 0; }