#include <bits/stdc++.h>
using namespace std;
const int sieve_size = 15000002;
bool sieve[sieve_size + 1];
vector<long long> prime;
void Sieve() {
  prime.push_back(2);
  for (int i = 3; i * i <= sieve_size; i += 2) {
    if (!sieve[i]) {
      long long p = i * 2;
      for (int j = i * i; j <= sieve_size; j += p) {
        sieve[j] = true;
      }
    }
  }
  for (int i = 3; i <= sieve_size; i += 2) {
    if (!sieve[i]) prime.push_back(i);
  }
}
int dx[] = {1, 0, -1, 0}, dy[] = {0, 1, 0, -1};
inline int GA(long long n, vector<long long>& vec) {
  for (int i = 0; i < n; ++i) {
    long long x;
    cin >> x;
    vec.push_back(x);
  }
  return 0;
}
inline int GAEG(long long m, vector<long long> vec[]) {
  for (int i = 0; i < m; ++i) {
    long long x, y;
    cin >> x >> y;
    x--, y--;
    vec[x].push_back(y);
    vec[y].push_back(x);
  }
  return 0;
}
const long long MD = (long long)1000000007;
;
bool isvalid(long long xx, long long yy, long long n, long long m) {
  return (xx >= 0 && xx < n && yy >= 0 && yy < m);
}
long long pw(long long x, long long y, long long dr) {
  if (y == 0) return 1;
  long long o = y / 2;
  long long f = pw(x, o, dr) % dr;
  if (y % 2) {
    return (((f * f) % dr) * x) % dr;
  } else
    return (f * f) % dr;
}
vector<long long> v;
long long ap = 1, aq = 1;
vector<long long> zz;
vector<long long> oo;
long long mm = 0;
pair<long long, long long> DD() {
  mm++;
  long long mn = 1ll << 61, nm = 0;
  for (auto i : v) {
    if (i < mn) mn = i;
  }
  long long cnt = 0;
  for (auto i : v) {
    if (i == mn) {
      nm++;
      if (mm == 1) zz.push_back(cnt);
    }
    if (i == mn + 1) {
      if (mm == 1) oo.push_back(cnt);
    }
    cnt++;
  }
  return make_pair(nm, mn);
}
string s;
long long ans;
long long ov = 0;
long long FF(long long x, bool bl) {
  long long p = -1, q = -1;
  for (int i = 0; i < v.size(); ++i) {
    if (s[i] == '(') {
      p = i;
    }
    if (v[i] < x) p = -1;
    if (v[i] == x && p != -1) {
      long long ff = 1;
      long long j = i + 1;
      while (j < v.size() - 1 && v[j] >= x) {
        if (s[j] == ')') q = j;
        if (v[j] == x) ff++;
        j++;
      }
      if (s[j] == ')') q = j;
      if (bl) ff += ov;
      if (q != -1 && p != -1 && ff > ans) {
        ans = ff;
        ap = p;
        aq = q;
      }
      i = j;
    }
  }
  return 0;
}
int main() {
  ios_base::sync_with_stdio(NULL);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  long long n;
  cin >> n;
  cin >> s;
  long long c = 0;
  long long p = -1, q = -1;
  c = 0;
  for (auto i : s) {
    if (i == '(')
      c++;
    else
      c--;
    v.push_back(c);
  }
  if (c) {
    cout << 0 << endl;
    cout << "1 1" << endl;
    return 0;
  }
  pair<long long, long long> y = DD();
  ov = y.first;
  ans = y.first;
  long long mn = y.second;
  long long u1 = min(oo[0], zz[0]);
  long long u2 = max(oo[oo.size() - 1], zz[zz.size() - 1]);
  u2++;
  while (u1 > 0) {
    if (s[u1] == ')') break;
    u1--;
  }
  while (u1 < u2) {
    if (s[u1] == ')') break;
    u1++;
  }
  while (u2 < s.size() - 1) {
    if (s[u2] == '(') break;
    u2++;
  }
  while (u2 > u1) {
    if (s[u2] == '(') break;
    u2--;
  }
  if (s[u1] == ')' && s[u2] == '(') {
    p = u1, q = u2;
  }
  if (p != -1 && q != -1) {
    for (int i = p; i < q; ++i) v[i] += 2;
    y = DD();
    if (y.first > ans) {
      ans = y.first;
      ap = p, aq = q;
    }
    for (int i = p; i < q; ++i) v[i] -= 2;
  }
  p = -1, q = -1;
  u1 = zz[0];
  u2 = zz[zz.size() - 1] + 1;
  while (u1 > 0) {
    if (s[u1] == ')') break;
    u1--;
  }
  while (u2 < s.size() - 1) {
    if (s[u2] == '(') break;
    u2++;
  }
  if (s[u1] == ')' && s[u2] == '(') {
    p = u1, q = u2;
  }
  if (p != -1 && q != -1) {
    for (int i = p; i < q; ++i) v[i] += 2;
    y = DD();
    if (y.first > ans) {
      ans = y.first;
      ap = p, aq = q;
    }
    for (int i = p; i < q; ++i) v[i] -= 2;
  }
  p = -1, q = -1;
  FF(mn + 1, false);
  FF(mn + 2, true);
  cout << ans << endl;
  cout << ap + 1 << " " << aq + 1 << endl;
  return 0;
}
