#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; void ZAlgorithm(const string& s, vector& len) { int n = s.size(); int i = 1; int j = 0; len.resize(n); len[0] = n; while(i < n){ while(i+j < n && s[j] == s[i+j]) ++j; len[i] = j; if(j == 0){ ++ i; continue; } int k = 1; while (i+k < n && k+len[k] < j){ len[i+k] = len[k]; ++ k; } i += k; j -= k; } } const int MOD = 1000000007; int main() { string s; cin >> s; int n = s.size(); int ans = 0; vector dp((n+1)/2, 0); dp[0] = 1; for(int i=0; i<(n+1)/2; ++i){ ans += dp[i]; ans %= MOD; int m = n - 2 * i; string t = s.substr(i, m); vector len; ZAlgorithm(t, len); for(int j=0; j