#include <bits/stdc++.h>
using namespace std;
namespace catalanswap {
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  if (n % 2 == 1) {
    cout << 0 << endl;
    cout << 1 << " " << 1 << endl;
    return 0;
  }
  int ocnt = 0;
  int ccnt = 0;
  string s;
  cin >> s;
  vector<int> seq;
  seq.push_back(0);
  int count = 0;
  for (int i = 0; i < n; i++) {
    if (s[i] == ')') {
      count++;
      seq.push_back(count);
      ocnt++;
    } else {
      count--;
      seq.push_back(count);
      ccnt++;
    }
  }
  if (ocnt != ccnt) {
    cout << 0 << endl;
    cout << 1 << " " << 1 << endl;
    return 0;
  }
  int maxi = 0;
  for (int i = 0; i < seq.size(); i++) {
    maxi = max(maxi, seq[i]);
  }
  int col[n];
  for (int i = 0; i < n; i++) {
    if (seq[i] == maxi) {
      col[i] = 2;
    } else if (seq[i] == maxi - 1) {
      col[i] = 1;
    } else {
      col[i] = 0;
    }
  }
  int pref[n];
  pref[0] = 0;
  if (col[0] == 1) {
    pref[0]++;
  }
  for (int i = 1; i < n; i++) {
    pref[i] = pref[i - 1];
    if (col[i] == 1) {
      pref[i]++;
    }
  }
  vector<int> maxes;
  for (int i = 0; i < n; i++) {
    if (col[i] == 2) {
      maxes.push_back(i);
    }
  }
  int init = maxes.size();
  int max = init;
  pair<int, int> ans = {1, 1};
  int totones = pref[n - 1];
  for (int i = 0; i < maxes.size() - 1; i++) {
    int possible = pref[maxes[i + 1]] - pref[maxes[i]];
    if (possible > max) {
      max = possible;
      ans = {maxes[i] + 1, maxes[i + 1]};
    }
    totones -= possible;
  }
  if (totones > max) {
    max = totones;
    if (maxes[0] != 0) {
      ans = {maxes[0], maxes[maxes.size() - 1] + 1};
    } else {
      ans = {maxes[maxes.size() - 1] + 1, n};
    }
  }
  int newcol[n];
  vector<int> bigs;
  for (int i = 0; i < n; i++) {
    if (seq[i] >= maxi - 1) {
      newcol[i] = 2;
      bigs.push_back(i);
    } else if (seq[i] == maxi - 2) {
      newcol[i] = 1;
    } else {
      newcol[i] = 0;
    }
  }
  int newpref[n];
  if (newcol[0] == 1) {
    newpref[0] = 1;
  } else {
    newpref[0] = 0;
  }
  for (int i = 1; i < n; i++) {
    newpref[i] = newpref[i - 1];
    if (newcol[i] == 1) {
      newpref[i]++;
    }
  }
  int totpos = newpref[n - 1];
  for (int i = 0; i < bigs.size() - 1; i++) {
    int kl = newpref[bigs[i + 1]] - newpref[bigs[i]];
    if (init + kl > max) {
      max = init + kl;
      ans = {bigs[i] + 1, bigs[i + 1]};
    }
    totpos -= kl;
  }
  if (init + totpos > max) {
    max = init + totpos;
    if (bigs[0] == 0) {
      ans = {bigs[bigs.size() - 1] + 1, n};
    } else {
      ans = {bigs[0], bigs[bigs.size() - 1] + 1};
    }
  }
  cout << max << endl;
  cout << ans.first << " " << ans.second;
  return 0;
}
}  // namespace catalanswap
int main() {
  catalanswap::main();
  return 0;
}
