#include <bits/stdc++.h>
using namespace std;
const int N = 3e5;
int n, ans;
int Dpos[N + 3];
char str[N + 10], Nstr[N + 10];
int main() {
  scanf("%d%s", &n, str + 1);
  int Ncnt = 0, Ned = n, Nmin = 0;
  for (int i = 1; i <= n; i++) {
    if (str[i] == '(')
      Ncnt++;
    else
      Ncnt--;
    if (Nmin > Ncnt) {
      Nmin = Ncnt;
      Ned = i;
    }
  }
  if (Ncnt) printf("0\n1 1\n"), exit(0);
  int Npos = 1;
  for (int i = Ned + 1; i <= n; i++) Dpos[Npos] = i, Nstr[Npos++] = str[i];
  for (int i = 1; i <= Ned; i++) Dpos[Npos] = i, Nstr[Npos++] = str[i];
  for (int i = 1, Icnt = 0; i <= n; i++) {
    if (Nstr[i] == '(')
      Icnt++;
    else
      Icnt--;
    if (!Icnt) ans++;
  }
  int fans = ans;
  int ansl = 1, ansr = 1;
  for (int i = 1; i <= n;) {
    int Pcnt = 0;
    int j;
    for (j = i; j <= n; j++) {
      if (Nstr[j] == '(')
        Pcnt++;
      else
        Pcnt--;
      if (!Pcnt) break;
    }
    vector<pair<int, int> > vec;
    Pcnt = 0;
    int Ptot = 0;
    for (int k = i + 1; k < j; k++) {
      if (Nstr[k] == '(')
        Pcnt++;
      else
        Pcnt--;
      if (Pcnt == 0) {
        if (vec.empty())
          vec.push_back(make_pair(i + 1, k));
        else
          vec.push_back(make_pair(vec.back().second + 1, k));
      }
    }
    for (auto it : vec) {
      int L = it.first, R = it.second;
      int Kcnt = 0, Ktot = 0;
      for (int k = L + 1; k <= R - 1; k++) {
        if (Nstr[k] == '(')
          Kcnt++;
        else
          Kcnt--;
        if (!Kcnt) Ktot++;
      }
      if (ans < fans - 1 + 2 + Ktot) {
        ans = fans - 1 + 2 + Ktot;
        ansl = L;
        ansr = R;
      }
    }
    Ptot = vec.size();
    if (ans < Ptot + 1) {
      ans = Ptot + 1;
      ansl = i;
      ansr = j;
    }
    i = j + 1;
  }
  ansl = Dpos[ansl];
  ansr = Dpos[ansr];
  if (ansl > ansr) swap(ansl, ansr);
  printf("%d\n%d %d\n", ans, ansl, ansr);
  return 0;
}
