#include <bits/stdc++.h>
using namespace std;
const int maxn = 305000;
int n, gogogo, val, cnt = 1, pre[maxn], res0 = 0;
char s[maxn], ps[maxn];
stack<pair<char, int> > stk;
vector<int> x, y;
pair<int, int> ans;
int Ans = 0;
int main() {
  scanf("%d%s", &n, s + 1);
  for (int i = 1; i <= n; i++) {
    val += (s[i] == '(') ? 1 : -1;
    if (!stk.empty() && stk.top().first == '(' && s[i] == ')')
      stk.pop();
    else
      stk.push(make_pair(s[i], i));
  }
  if (val != 0) {
    printf("0\n1 1\n");
    return 0;
  }
  while (!stk.empty() && stk.top().first == '(') stk.pop();
  if (!stk.empty()) gogogo = stk.top().second;
  for (int i = gogogo + 1; i <= n; i++, cnt++) ps[cnt] = s[i];
  for (int i = 1; i <= gogogo; i++, cnt++) ps[cnt] = s[i];
  x.push_back(0);
  cnt = 0;
  for (int i = 1; i <= n; i++) {
    pre[i] = pre[i - 1] + ((ps[i] == '(') ? 1 : -1);
    if (!pre[i]) cnt++;
    if (pre[i] == 0) {
      x.push_back(i);
      res0++;
    }
    if (pre[i] == 1) y.push_back(i);
  }
  ans = make_pair(1, 1);
  Ans = cnt;
  for (int i = 0; i < ((int)x.size() - 1); i++) {
    int tmp = 0;
    for (int j = x[i] + 1; j < x[i + 1]; j++) {
      if (pre[j] == 1) tmp++;
    }
    if (tmp > Ans && x[i] + 1 <= x[i + 1] - 1) {
      Ans = tmp, ans = make_pair(x[i] + 1, x[i + 1]);
    }
  }
  for (int i = 0; i < ((int)y.size() - 1); i++) {
    int tmp = 0;
    for (int j = y[i] + 1; j < y[i + 1]; j++) {
      if (pre[j] == 2) tmp++;
    }
    tmp += res0;
    if (tmp > Ans && y[i] + 1 <= y[i + 1] - 1) {
      Ans = tmp, ans = make_pair(y[i] + 1, y[i + 1]);
    }
  }
  ans.first += gogogo - 1;
  ans.first %= n;
  ans.first++;
  ans.second += gogogo - 1;
  ans.second %= n;
  ans.second++;
  printf("%d\n%d %d", Ans, ans.first, ans.second);
  return 0;
}
