#![allow(non_snake_case)] #![allow(dead_code, unused_macros)] use std::collections::HashMap; use std::hash::Hash; #[allow(unused_imports)] use proconio::{input, marker::Usize1, marker::Chars}; #[allow(unused_imports)] use itertools::Itertools; macro_rules! d { ( $( $x:expr ),* $(,)? ) => { println!( concat!( $( stringify!($x), "={:?} " ),* ), $( $x ),* ); }; } fn mod_pow(base: i64, exp: i64, modulus: i64) -> i64 { if exp == 0 { return 1 } if exp == 1 { return base % modulus } let x = mod_pow(base, exp / 2, modulus); if exp & 1 > 0 { ((x * base) % modulus) * x % modulus } else { x * x % modulus } } const MOD: i64 = 998244353; fn main() { input! { S: Chars, } let mut ans = 0; let mut m = 0; for c in S { if c == 'A' { ans += mod_pow(3, m, MOD); ans %= MOD; } else if c == 'M' { m += 1; } } println!("{ans}"); }