#include <bits/stdc++.h>
using namespace std;
int n;
string org;
int cum[300002], cum2[300002];
void print(int a, int b, int c) {
  cout << a << endl;
  cout << b << " " << c << endl;
  return;
}
vector<int> solve(int min_threshold, int min_pos) {
  int i, pos;
  int cnt = 0, lft = -1, rgt = -1, max_cnt = -1, max_lft = -1, max_rgt = -1;
  for (i = 1; i <= n; i++) {
    pos = min_pos + i;
    if (pos > n) pos %= n;
    if (lft == -1 && org[pos - 1] == '(' && cum[i] >= min_threshold) {
      cnt = 0;
      lft = pos;
      rgt = -1;
    } else if (lft && org[pos - 1] == ')') {
      rgt = pos;
      if (cnt > max_cnt) {
        max_cnt = cnt;
        max_lft = lft;
        max_rgt = rgt;
      }
    }
    if (lft && cum[i] == min_threshold) {
      cnt++;
    } else if (cum[i] < min_threshold) {
      cnt = 0;
      lft = -1;
      rgt = -1;
    }
  }
  if (min_threshold == 2) {
    for (i = 1; i <= n; i++) {
      if (cum[i] == 0) max_cnt++;
    }
  }
  vector<int> v = {max_cnt, max_lft, max_rgt};
  return v;
}
int main() {
  int i, pos;
  int ans = 0;
  cin >> n;
  cin >> org;
  n = org.length();
  if (n % 2) {
    print(0, 1, 1);
    return 0;
  }
  cum[0] = 0;
  int min_val = 0, min_pos = 0;
  for (i = 1; i <= n; i++) {
    cum[i] = cum[i - 1] + (org[i - 1] == '(' ? 1 : -1);
    if (cum[i] < min_val) {
      min_val = cum[i];
      min_pos = i;
    }
  }
  if (cum[n]) {
    print(0, 1, 1);
    return 0;
  }
  if (min_val < 0) {
    for (i = 1; i <= n; i++) {
      pos = min_pos + i;
      if (pos > n) {
        pos %= n;
      }
      cum2[i] = cum[pos] - min_val;
    }
    for (i = 1; i <= n; i++) {
      cum[i] = cum2[i];
    }
  }
  for (i = 1; i <= n; i++)
    if (!cum[i]) ans++;
  vector<vector<int>> v(3);
  v[0] = {ans, 1, 1};
  v[1] = solve(1, min_pos);
  v[2] = solve(2, min_pos);
  int ans_idx = 0;
  for (i = 1; i <= 2; i++) {
    if (v[i][0] > ans) {
      ans_idx = i;
      ans = v[i][0];
    }
  }
  print(v[ans_idx][0], v[ans_idx][1], v[ans_idx][2]);
}
