#include <bits/stdc++.h>
using namespace std;
struct c {
  int l, r;
  char C;
  c(int l, int r, char C) : l(l), r(r), C(C) {}
  c() {}
};
const int N = 100010;
char s[N];
vector<int> e[N][2], f[N][2];
const int M = 998244353;
int ff[N];
int main() {
  scanf("%s", s + 1);
  int n = strlen(s + 1);
  queue<c> q;
  for (int i = 1; i <= n; ++i) {
    e[i][s[i] - 'a'].push_back(i + 1);
    f[i + 1][s[i] - 'a'].push_back(i);
    if (s[i] == s[i + 1]) q.push(c(i, i + 2, s[i] == 'a' ? 'b' : 'a'));
  }
  while (!q.empty()) {
    c x = q.front();
    q.pop();
    e[x.l][x.C - 'a'].push_back(x.r);
    f[x.r][x.C - 'a'].push_back(x.l);
    if (e[x.r][x.C - 'a'].size()) {
      for (auto i : e[x.r][x.C - 'a'])
        q.push(c(x.l, i, x.C == 'a' ? 'b' : 'a'));
    }
    if (f[x.l][x.C - 'a'].size()) {
      for (auto i : f[x.l][x.C - 'a'])
        q.push(c(i, x.r, x.C == 'a' ? 'b' : 'a'));
    }
  }
  ff[1] = 1;
  for (int i = 1; i <= n; ++i) {
    for (auto j : e[i][0]) (ff[j] += ff[i]) %= M;
    for (auto j : e[i][1]) (ff[j] += ff[i]) %= M;
  }
  cout << ff[n + 1];
}
