#include using namespace std; using ll = long long; using P = pair; #define rep(i,n) for(int (i) = 0; i<(n); i++) const int max_n = 200000; template struct modint{ public: ll x; modint(ll x=0) : x((x%mod+mod)%mod) {} modint operator-() const { return modint(-x); } modint& operator+=(const modint& a){ if(mod<=(x += a.x)) x-=mod; return *this; } modint& operator-=(const modint& a){ if(mod<=(x+=mod-a.x)) x-=mod; return *this; } modint& operator*=(const modint& a){ (x*=a.x)%=mod; return *this; } modint& operator++(){ ++x; return *this; } modint operator++(int){ modint temp = *this; x++; return temp; } modint& operator--(){ --x; return *this; } modint operator--(int){ modint temp = *this; x--; return temp; } modint pow(ll t) const{ modint a=1,b=x; while(t){ if(t&1) a*=b; b*=b; t/=2; } return a; } modint inv() const { return pow(mod-2); } modint& operator/=(const modint& a){ return (*this)*=a.inv(); } friend modint operator+(const modint& a, const modint& b) { return modint(a)+=b; } friend modint operator-(const modint& a, const modint& b) { return modint(a)-=b; } friend modint operator*(const modint& a, const modint& b) { return modint(a)*=b; } friend modint operator/(const modint& a, const modint& b) { return modint(a)/=b; } friend bool operator==(const modint& a, const modint& b) { return (modint(a).x==b.x); } friend bool operator!=(const modint& a, const modint& b) { return (modint(a).x!=b.x); } friend ostream& operator<<(ostream& os, const modint& m){ os << m.x; return os; } friend istream& operator>>(istream& is, modint& m){ is >> m.x; return is; } }; using fp998=modint<998244353>; int main(){ string s; cin >> s; int n = s.size(); // 制約 assert(1<=n && n<=max_n); rep(i,n) assert(s[i]=='A' || s[i]=='M'); // 3**n を前計算 vector p(n+5); p[0] = 1; rep(i,n+4) p[i+1] = p[i]*3; int cnt = 0; fp998 ans = 0; rep(i,n){ if(s[i]=='M') cnt++; else ans += p[cnt]; } cout << ans << endl; }