#include #include #include using namespace std; #define MOD 998244353 int main() { string s; while (cin >> s) { vector dyn(s.size()/2+1), mul(s.size()+10, 1); dyn[0] = 1; int64_t ret = 0; for (int y = 0; y < dyn.size(); y++) { for (int x = 0; x < y; x++) dyn[y] += (dyn[x] * mul[x+y]) % MOD; dyn[y] %= MOD; for (int i = 0, j = s.size()-1-y, sum = y+1; i <= y; i++, sum++) { if (s[i] != '?' && s[j] != '?' && s[i] != s[j]) mul[sum] = 0; if (s[i] == '?' && s[j] == '?') mul[sum] = (mul[sum] * 26) % MOD; } for (int i = y, j = s.size()-1, sum = y+1; j > s.size()-1-y; j--, sum++) { if (s[i] != '?' && s[j] != '?' && s[i] != s[j]) mul[sum] = 0; if (s[i] == '?' && s[j] == '?') mul[sum] = (mul[sum] * 26) % MOD; } int64_t oneWord = dyn[y]; for (int i = y; i+y < s.size(); i++) if (s[i] == '?') oneWord = (oneWord * 26) % MOD; ret += oneWord; } cout << ret % MOD << endl; } }