#include using namespace std; #define rep(i, n) for (int i=0; i z_algo(string s) { int c=0, n=s.size(); vector z(n, 0); for (int i=1; i z = z_algo(s.substr(l, n-2*l)); ll res = 1; for (int i=n-2*l-1; i>=0; i--) { int com = n-2*l-i; if (z[i]==com && 2*com<=n-2*l) res = (res+f(l+com))%MOD; } return memo[l] = res; } int main() { //ループ変数が被っていないか? //制約を確認しているか? //変数のtypoがないか? cin.tie(0); ios::sync_with_stdio(false); cin >> s; n = s.size(); fill(memo, memo+10000, -1); cout << f(0) << endl; }