Language: C++

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<iostream>
using namespace std;

typedef long long ll;
const ll MOD=1e9+7;
const ll base=1123;
const int MAXN=5e5+5;

string s;
int n;
ll pow[MAXN],hash[MAXN];
bool l[MAXN],r[MAXN];

void Init(){
    s=' '+s;
    n=s.length();
    pow[0]=1;
    for(int i=1;i<=n;i++) pow[i]=(1ll*pow[i-1]*base)%MOD;
    for(int i=1;i<=n;i++) hash[i]=(1ll*hash[i-1]*base+s[i]-'a')%MOD;
}

ll get(int l,int r){
    return ((1ll*hash[r]-1ll*hash[l-1]*pow[r-l+1])%MOD+MOD)%MOD;
}

int main(){
    cin >> s;
    bool same=1;
    for(int i=1;i<s.length();i++) if(s[i]!=s[i-1]){same=0;break;}
    if(same) return printf("%d\n1",s.length()),0;
    Init();
    for(int i=1;i<=n;i++)
        for(int j=i*2;j<=n;j+=i){
            if(get(1,i)==get(j-i+1,j)) l[j]=1;
            else break;
        }
    for(int i=1;i<=n;i++)
        for(int j=n-i*2+1;j>=1;j-=i){
            if(get(j,j+i-1)==get(n-i+1,n)) r[j]=1;
            else break;
        }
    if(l[n]) return printf("1\n1"),0;
    int ans=0;
    for(int i=1;i<n;i++) if(!l[i]&&!r[i+1]) ans++;
    printf("2\n%d",ans);
}


Compiler output:
a.cc:15:4: warning: built-in function 'pow' declared as non-function [-Wbuiltin-declaration-mismatch]
   15 | ll pow[MAXN],hash[MAXN];
      |    ^~~
a.cc: In function 'void Init()':
a.cc:23:27: error: reference to 'hash' is ambiguous
   23 |     for(int i=1;i<=n;i++) hash[i]=(1ll*hash[i-1]*base+s[i]-'a')%MOD;
      |                           ^~~~
In file included from /usr/include/c++/14/string_view:50,
                 from /usr/include/c++/14/bits/basic_string.h:47,
                 from /usr/include/c++/14/string:54,
                 from a.cc:4:
/usr/include/c++/14/bits/functional_hash.h:59:12: note: candidates are: 'template<class _Tp> struct std::hash'
   59 |     struct hash;
      |            ^~~~
a.cc:15:14: note:                 'll hash [500005]'
   15 | ll pow[MAXN],hash[MAXN];
      |              ^~~~
a.cc:23:40: error: reference to 'hash' is ambiguous
   23 |     for(int i=1;i<=n;i++) hash[i]=(1ll*hash[i-1]*base+s[i]-'a')%MOD;
      |                                        ^~~~
/usr/include/c++/14/bits/functional_hash.h:59:12: note: candidates are: 'template<class _Tp> struct std::hash'
   59 |     struct hash;
      |            ^~~~
a.cc:15:14: note:                 'll hash [500005]'
   15 | ll pow[MAXN],hash[MAXN];
      |              ^~~~
a.cc: In function 'll get(int, int)':
a.cc:27:18: error: reference to 'hash' is ambiguous
   27 |     return ((1ll*hash[r]-1ll*hash[l-1]*pow[r-l+1])%MOD+MOD)%MOD;
      |                  ^~~~
/usr/include/c++/14/bits/functional_hash.h:59:12: note: candidates are: 'template<class _Tp> struct std::hash'
   59 |     struct hash;
      |            ^~~~
a.cc:15:14: note:                 'll hash [500005]'
   15 | ll pow[MAXN],hash[MAXN];
      |              ^~~~
a.cc:27:30: error: reference to 'hash' is ambiguous
   27 |     return ((1ll*hash[r]-1ll*hash[l-1]*pow[r-l+1])%MOD+MOD)%MOD;
      |                              ^~~~
/usr/include/c++/14/bits/functional_hash.h:59:12: note: candidates are: 'template<class _Tp> struct std::hash'
   59 |     struct hash;
      |            ^~~~
a.cc:15:14: note:                 'll hash [500005]'
   15 | ll pow[MAXN],hash[MAXN];
      |              ^~~~