#include <bits/stdc++.h>
using namespace std;
const int mx = 3e5 + 5;
const int mod = 1e9 + 7;
int n;
int sum[mx];
char s[mx];
int lp[mx], rp[mx], psiz;
int cnt[mx], lc[mx], rc[mx];
bool vis[mx], mark[mx];
int fa[mx];
bool get_pos() {
  stack<int> s1;
  int j = 0;
  for (int i = 1; i <= n; i++) {
    if (s[i] == '(') {
      s1.push(i);
    } else {
      if (s1.empty()) {
        lp[psiz++] = i;
        mark[i] = 1;
        continue;
      }
      int now = s1.top();
      lc[now] = i, rc[i] = now;
      s1.pop();
    }
  }
  if (s1.size() != psiz) return 0;
  reverse(lp, lp + psiz);
  while (!s1.empty()) {
    rp[j++] = s1.top();
    mark[rp[j - 1]] = 1;
    s1.pop();
  }
  reverse(rp, rp + psiz);
  return 1;
}
inline int get_int(int l, int r) { return sum[r] - sum[l]; }
void get_val() {
  stack<int> s1;
  for (int i = 1; i <= n; i++) {
    if (mark[i]) continue;
    if (s[i] == '(') {
      s1.push(i);
    } else {
      int now = s1.top();
      s1.pop();
      if (!s1.empty()) {
        cnt[s1.top()]++;
        fa[now] = s1.top();
      } else {
        sum[now]++;
        vis[now] = 1;
      }
    }
  }
}
int main() {
  scanf("%d", &n);
  scanf("%s", s + 1);
  int ans, l, r;
  if (!get_pos()) return 0 * puts("0\n1 1");
  get_val();
  for (int i = 1; i <= n; i++) sum[i] += sum[i - 1];
  rp[psiz] = n + 1;
  lp[psiz] = 0;
  sum[n + 1] = sum[n];
  ans = get_int(lp[0], rp[0]) + (psiz > 0);
  l = 1, r = 1;
  for (int i = lp[0] + 1; i < rp[0]; i++) {
    if (s[i] == '(') {
      if (vis[i]) {
        if (cnt[i] + 1 > ans) {
          ans = cnt[i] + 1;
          l = i, r = lc[i];
        }
      } else if (vis[fa[i]]) {
        int ret = get_int(lp[0], rp[0]) + cnt[i] + 1 + (psiz > 0);
        if (ret > ans) {
          ans = ret;
          l = i, r = lc[i];
        }
      }
    }
  }
  if (psiz) {
    int ret = get_int(lp[1], rp[1]) - get_int(lp[0], rp[0]) + (psiz > 1) + 1;
    if (ret > ans) {
      ans = ret;
      l = lp[0], r = rp[0];
    }
    if (psiz > 1) {
      ret = get_int(lp[2], rp[2]) + 2;
      ret -= get_int(lp[1], lp[0]) + get_int(rp[0], rp[1]);
      ret += (psiz > 2);
      if (ret > ans) {
        ans = ret;
        l = lp[1], r = rp[1];
      }
    }
    int L = lp[0];
    while (L != lp[1]) {
      if (vis[L]) {
        ret = get_int(lp[0], rp[0]) + 2;
        ret += cnt[L];
        if (ret > ans) {
          ans = ret;
          l = L, r = lc[L];
        }
      }
      L--;
    }
    int R = rp[0];
    while (R != rp[1]) {
      if (vis[R]) {
        ret = get_int(lp[0], rp[0]) + 2;
        ret += cnt[R];
        if (ret > ans) {
          ans = ret;
          l = R, r = lc[R];
        }
      }
      R++;
    }
  }
  printf("%d\n%d %d\n", ans, l, r);
  return 0;
}
