#include <bits/stdc++.h>
char c[1010000];
int n, zhan[1010000], max = 0, x = 1;
struct s_node {
  int s, e;
  s_node *next;
} * head;
void insert(int s, int e) {
  s_node *p = new s_node;
  p->next = head;
  head = p;
  p->s = s;
  p->e = e;
  bool done = true;
  while (done) {
    done = false;
    while (p->next != NULL && (p->next)->e == p->s - 1)
      p->s = (p->next)->s, p->next = (p->next)->next, done = true;
    while (p->next != NULL && (p->next)->e < p->e && (p->next)->s > p->s)
      p->next = (p->next)->next, done = true;
  }
  if (max == p->e - p->s + 1) x++;
  if (max < p->e - p->s + 1) max = p->e - p->s + 1, x = 1;
}
void doit() {
  int e = 0, t = 0;
  while (e < n) {
    if (c[e] == '(')
      zhan[++t] = e;
    else if (t)
      insert(zhan[t--], e);
    e++;
  }
  printf("%d %d", max, x);
}
int main() {
  scanf("%s", c);
  n = strlen(c);
  doit();
  return 0;
}
