#include <bits/stdc++.h>
using namespace std;
int len;
char str[500010], suf[500010];
void make_nxt(int nxt[], char s[]) {
  nxt[0] = -1;
  int f = 0;
  for (int i = 1; i < len; i++) {
    while (f && s[i] != s[f]) f = nxt[f];
    if (s[i] == s[f])
      nxt[i + 1] = ++f;
    else
      nxt[i + 1] = 0;
  }
}
bool no_rep(int nxt[], int p) { return nxt[p] == 0 || p % (p - nxt[p]); }
int pre[500010], nxt[500010];
int main() {
  scanf("%s", str);
  len = strlen(str);
  for (int i = 0; i < len; i++) suf[i] = str[len - i - 1];
  suf[len] = '\0';
  make_nxt(pre, str);
  make_nxt(nxt, suf);
  if (no_rep(pre, len)) {
    puts("1\n1");
    return 0;
  }
  bool same = true;
  for (int i = 1; i < len; i++)
    if (str[i] != str[i - 1]) same = false;
  if (same) {
    printf("%d\n1\n", len);
    return 0;
  }
  puts("2");
  int ans = 0;
  for (int i = 0; i < len; i++)
    if (no_rep(pre, i + 1) && no_rep(nxt, len - i - 1)) ans++;
  printf("%d\n", ans);
  return 0;
}
