#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=998244353,N=8e6+5;
vector<int> A[N];
int dp[N];
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
string S;
cin>>S;
int n=S.size();
set<string> s[n+1];
s[n].insert(S);
int cnt=2;
map<string,int> mp;
map<string,bool> mp1;
mp[S]=1;
for(int a=n-1;a>0;a--){
for(auto f:s[a+1]){
string d=f.substr(0,a),e=f.substr(1,a);
if(!mp1[d]){
mp[d]=cnt;
mp1[d]=1;
cnt++;
}
if(d!=e&&!mp1[e]){
mp[e]=cnt;
mp1[e]=1;
cnt++;
}
if(d==e) A[mp[f]].push_back(mp[d]);
else{
A[mp[f]].push_back(mp[d]);
A[mp[f]].push_back(mp[e]);
}
s[a].insert(d);
s[a].insert(e);
}
}
int sum=0;
dp[1]=1;
for(int a=1;a<=cnt-1;a++){
for(int b:A[a]){
dp[b]+=dp[a];
dp[b]%=mod;
}
}
for(int a=1;a<=cnt-1;a++){
sum+=dp[a];
sum%=mod;
}
cout<<sum;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBpbnQgbG9uZyBsb25nCmNvbnN0IGludCBtb2Q9OTk4MjQ0MzUzLE49OGU2KzU7CnZlY3RvcjxpbnQ+IEFbTl07CmludCBkcFtOXTsKc2lnbmVkIG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoMCk7CiAgICBjb3V0LnRpZSgwKTsKICAgIHN0cmluZyBTOwogICAgY2luPj5TOwogICAgaW50IG49Uy5zaXplKCk7CiAgICBzZXQ8c3RyaW5nPiBzW24rMV07CiAgICBzW25dLmluc2VydChTKTsKICAgIGludCBjbnQ9MjsKICAgIG1hcDxzdHJpbmcsaW50PiBtcDsKICAgIG1hcDxzdHJpbmcsYm9vbD4gbXAxOwogICAgbXBbU109MTsKICAgIGZvcihpbnQgYT1uLTE7YT4wO2EtLSl7CiAgICAgICAgZm9yKGF1dG8gZjpzW2ErMV0pewogICAgICAgICAgICBzdHJpbmcgZD1mLnN1YnN0cigwLGEpLGU9Zi5zdWJzdHIoMSxhKTsKICAgICAgICAgICAgaWYoIW1wMVtkXSl7CiAgICAgICAgICAgICAgICBtcFtkXT1jbnQ7CiAgICAgICAgICAgICAgICBtcDFbZF09MTsKICAgICAgICAgICAgICAgIGNudCsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGQhPWUmJiFtcDFbZV0pewogICAgICAgICAgICAgICAgbXBbZV09Y250OwogICAgICAgICAgICAgICAgbXAxW2VdPTE7CiAgICAgICAgICAgICAgICBjbnQrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZihkPT1lKSBBW21wW2ZdXS5wdXNoX2JhY2sobXBbZF0pOwogICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgQVttcFtmXV0ucHVzaF9iYWNrKG1wW2RdKTsKICAgICAgICAgICAgICAgIEFbbXBbZl1dLnB1c2hfYmFjayhtcFtlXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc1thXS5pbnNlcnQoZCk7CiAgICAgICAgICAgIHNbYV0uaW5zZXJ0KGUpOwogICAgICAgIH0KICAgIH0KICAgIGludCBzdW09MDsKICAgIGRwWzFdPTE7CiAgICBmb3IoaW50IGE9MTthPD1jbnQtMTthKyspewogICAgICAgIGZvcihpbnQgYjpBW2FdKXsKICAgICAgICAgICAgZHBbYl0rPWRwW2FdOwogICAgICAgICAgICBkcFtiXSU9bW9kOwogICAgICAgIH0KICAgIH0KICAgIGZvcihpbnQgYT0xO2E8PWNudC0xO2ErKyl7CiAgICAgICAgc3VtKz1kcFthXTsKICAgICAgICBzdW0lPW1vZDsKICAgIH0KICAgIGNvdXQ8PHN1bTsKfQo=
YXNqbmthanNuZGlhc2hkZ2lhc2Rnam9zYWlkb3NpZG5vbnNkamZ3a2p2bmtzZHNoZGJhaGZhaXVzaGZpYXVocml3dWhyZW51eXdxZXVyd3J3ZWl3dWVoZ2lldXdoZml3dWhpZXd1Zmhxd2l1aHJ3cW5pd3Focml3cWZrZXdmZXdrZmVvaWZqZXdvZWZpandvZWlqb2lmamVvaWZvZ3VlZGt3bWxhem9hc29reG9zZndvZGZqd29pZmplb2lmam9ld2lmd2VmZXdmcGV3ZmVsZndlcHdmbGV3ZndqZHFqaWZxd2ZxZnFpc2pxd2VydHl1aW9wYXNkZmdoamtsbGxsbGxsbGxsbGx6eGN2Ym5t
asjnkajsndiashdgiasdgjosaidosidnonsdjfwkjvnksdshdbahfaiushfiauhriwuhrenuywqeurwrweiwuehgieuwhfiwuhiewufhqwiuhrwqniwqhriwqfkewfewkfeoifjewoefijwoeijoifjeoifoguedkwmlazoasokxosfwodfjwoifjeoifjoewifwefewfpewfelfwepwflewfwjdqjifqwfqfqisjqwertyuiopasdfghjkllllllllllllzxcvbnm