#include <bits/stdc++.h>
using namespace std;
const long double PI = 3.14159265358979323846264338328;
const long long mx64 = 9223372036854775807;
const int mx32 = 2147483647;
const short int mx16 = 32767;
const long long mod1 = 1000000007;
const long long mod2 = 998244353;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout.precision(25);
  int n;
  cin >> n;
  string wrs;
  cin >> wrs;
  vector<char> s(n);
  map<char, int> mp;
  mp['('] = 0;
  mp[')'] = 0;
  for (int i = 0; i < n; i++) {
    s[i] = wrs[i];
    mp[s[i]]++;
  }
  if (mp[')'] != mp['(']) {
    cout << "0\n1 1";
    return 0;
  }
  int start = 0;
  stack<char> st;
  for (int i = 0; i < 2 * n; i++) {
    if (s[i % n] == '(') {
      st.push(s[i % n]);
    } else {
      if (!st.size()) {
        start = i + 1;
      } else {
        st.pop();
      }
    }
    if (i - start == n) {
      break;
    }
  }
  vector<char> s2(n);
  for (int i = 0; i < n; i++) {
    s2[i] = s[(start + i) % n];
  }
  stack<pair<char, int>> st2;
  vector<pair<int, int>> pr;
  int cnt_outside = 0;
  for (int i = 0; i < n; i++) {
    if (s2[i] == '(') {
      st2.push({s2[i], i});
    } else {
      if (st2.size() == 1) {
        pr.push_back({st2.top().second, i});
      }
      st2.pop();
      if (!st2.size()) {
        cnt_outside++;
      }
    }
  }
  int max_cnt_in = 0;
  pair<int, int> pair_max_cnt_in;
  stack<char> st3;
  for (int i = 0; i < pr.size(); i++) {
    if (pr[i].first == pr[i].second - 1) {
      continue;
    }
    int cnt_in = 0;
    for (int j = pr[i].first + 1; j < pr[i].second; j++) {
      if (s2[j] == '(') {
        st3.push(s2[j]);
      } else {
        st3.pop();
        if (!st3.size()) {
          cnt_in++;
        }
      }
    }
    if (cnt_in + 1 > max_cnt_in) {
      max_cnt_in = cnt_in + 1;
      pair_max_cnt_in = {(pr[i].first + start) % n + 1,
                         (pr[i].second + start) % n + 1};
    }
    vector<pair<int, int>> pr2;
    stack<pair<char, int>> st4;
    for (int j = pr[i].first + 1; j < pr[i].second; j++) {
      if (s2[j] == '(') {
        st4.push({s2[j], j});
      } else {
        if (st4.size() == 1) {
          pr2.push_back({st4.top().second, j});
        }
        st4.pop();
      }
    }
    int cnt_in_in = 0;
    stack<char> st5;
    for (int j = 0; j < pr2.size(); j++) {
      cnt_in_in = 0;
      for (int k = pr2[j].first + 1; k < pr2[j].second; k++) {
        if (s2[k] == '(') {
          st5.push(s2[k]);
        } else {
          st5.pop();
          if (!st5.size()) {
            cnt_in_in++;
          }
        }
      }
      if (cnt_outside - 1 + 2 + cnt_in_in > max_cnt_in) {
        max_cnt_in = cnt_outside - 1 + 2 + cnt_in_in;
        pair_max_cnt_in = {(pr2[j].first + start) % n + 1,
                           (pr2[j].second + start) % n + 1};
      }
    }
  }
  if (max_cnt_in == 0) {
    cout << n / 2 << "\n1 1";
    return 0;
  }
  cout << max_cnt_in << "\n";
  cout << pair_max_cnt_in.first << " " << pair_max_cnt_in.second;
  return 0;
}
