#include <cstdio>
#include <iostream>
#include <algorithm> 
#include <cstring>
using namespace std;
char s[100005];
int n,nxt[100005];
bool f[3][100005];
void KMP(int x) {
	int j=0;
	nxt[1]=0;
    for (int i=2; i<=n; i++) {
    	while (j!=0 && s[i]!=s[j+1]) j=nxt[j];
    	if (s[i]==s[j+1]) j++;
    	nxt[i]=j;
    }

    for (int i=1; i<=n; i++)
	    if (nxt[i]==0 || i%(i-nxt[i])!=0)
		    f[x][i]=true;
}
bool check() {
	bool flag=false;
	for (int i=2; i<=n; i++)
	    if (s[i]!=s[i-1]) flag=true;
	if (!flag) return true;
	else return false; 
}
int main() {
	scanf("%s",s+1);
	n=strlen(s+1);	
	KMP(1);
	if (f[1][n]==true) {
		printf("1\n1\n");
		return 0;
	}
	if (check()) {
		printf("%d\n1\n",n);
		return 0; 
	} 
	reverse(s+1,s+1+n);
	KMP(2);
	int ans=0; 
	for (int i=1; i<=n; i++)
	    if (f[1][i] && f[2][n-i])
		     ans++;
	printf("2\n%d\n",ans); 
	return 0; 
}