#include <bits/stdc++.h>
using namespace std;
const int MAXN = 6e5 + 10;
const long long MOD = 1e9 + 7;
const long long INF = 0x3f3f3f3f;
long long read() {
  long long x = 0, f = 1;
  char ch;
  do {
    ch = getchar();
    if (ch == '-') f = -1;
  } while (ch < '0' || ch > '9');
  do {
    x = x * 10 + ch - 48;
    ch = getchar();
  } while (ch >= '0' && ch <= '9');
  return x * f;
}
int N, M;
char str[MAXN];
int a[MAXN];
void init() {
  a[0] = str[0] == '(' ? 1 : -1;
  for (int i = 1; i < N; i++) {
    a[i] = a[i - 1] + (str[i] == '(' ? 1 : -1);
  }
}
void solve() {
  int mini;
  int ans;
  int maxi, ansl, ansr;
  int now, nowl, nowr;
  int nowb, j, templ, tempmaxi;
  scanf("%d%s", &N, str);
  init();
  if (a[N - 1]) {
    printf("0\n1 1\n");
    return;
  }
  mini = 0;
  ans = 1;
  for (int i = 1; i < N; i++) {
    if (a[i] < a[mini]) {
      mini = i;
      ans = 1;
    } else if (a[i] == a[mini]) {
      ans++;
    }
  }
  for (int i = 0; i <= mini; i++) {
    a[N + i] = a[i];
  }
  maxi = 0;
  ansl = ansr = 1;
  for (int i = mini; i < N + mini;) {
    now = nowb = tempmaxi = templ = 0;
    for (j = i + 1; a[j] != a[mini] && j <= N + mini; j++) {
      if (a[j] == a[mini] + 2) {
        now++;
      } else if (a[j] == a[mini] + 1) {
        nowb++;
        if (now > tempmaxi) {
          nowl = templ;
          nowr = j;
          tempmaxi = now;
        }
        templ = j;
        now = 0;
      }
    }
    if (tempmaxi > maxi) {
      maxi = tempmaxi;
      ansl = nowl + 1;
      ansr = nowr;
    }
    if (nowb > ans + maxi) {
      maxi = nowb - ans;
      ansl = i + 1;
      ansr = j;
    }
    i = j;
  }
  printf("%d\n%d %d\n", ans + maxi, ansl % N + 1, ansr % N + 1);
}
int main() {
  int T;
  T = 1;
  while (T--) {
    solve();
  }
  return 0;
}
