Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <vector>
- #include <string>
- using namespace std;
- const int mod = (1e+9)+7;
- int n;
- string s;
- long long sum = 0;
- vector<int> z_function (string s) {
- int n = (int) s.length();
- vector<int> z (n);
- for (int i=1, l=0, r=0; i<n; ++i) {
- if (i <= r)
- z[i] = min (r-i+1, z[i-l]);
- while (i+z[i] < n && s[z[i]] == s[i+z[i]])
- ++z[i];
- if (i+z[i]-1 > r)
- l = i, r = i+z[i]-1;
- }
- return z;
- }
- //long long binpow (long long a, long long n) {
- // long long res = 1;
- // while (n) {
- // if (n & 1)
- // res = ((res % mod) * (a % mod)) % mod;
- // a = ((a % mod) * (a % mod)) % mod;
- // n >>= 1;
- // }
- // return res;
- //}
- long long binpow (long long a, long long n) {
- if (n == 0)
- return 1ll;
- if (n % 2 == 1)
- return (binpow (a, n-1) * (a % mod)) % mod;
- else {
- long long b = binpow (a, n/2);
- return (b * b) % mod;
- }
- }
- int main() {
- cin >> s;
- int len = s.length();
- for (int i = 1; i < len; i++) {
- int t = 0;
- if(len % i ==0) {
- string b;
- for (int j = 0; j < i; j++) {
- b += s[j];
- }
- b += "#" + s;
- vector<int> a = z_function(b);
- for (int j = 0; j < len / i; j++) {
- if(a[i + j * i + 1] == i) {
- t++;
- }
- }
- }
- if(t == (len / i))
- sum = (sum + binpow(26, i) - 1ll) % mod;
- else
- sum = (sum + binpow(26, i)) % mod;
- }
- cout << sum % mod;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement