use proconio::{marker::*,*}; fn main(){ input!{ s:Chars, } let n=s.len(); let s=s.iter().map(|&c|(c as u8-'A' as u8+1) as usize).collect::>(); if (1..n).all(|i|s[i-1]==s[i]){ println!("1"); return; } const MOD:u64=998244353; let mut sum=vec![0;n+1]; let mut next=vec![[!0;4];n+1]; next[n][0]=n; for i in (0..n).rev(){ sum[i]=sum[i+1]^s[i]; for j in 0..4{ next[i][j]=next[i+1][j]; } next[i][sum[i]]=i; } let mut dp=vec![0;n+1]; dp[0]=1; let mut ans=0; for i in 0..=n{ if sum[i]==0{ ans=(ans+dp[i])%MOD; } for &ni in &next[i]{ if ni!=i && ni!=!0{ dp[ni]=(dp[ni]+dp[i])%MOD; } } } if sum[0]==0{ ans=(ans+MOD-1)%MOD; } println!("{ans}"); }