#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int p = 7;
const int MOD[2] = {(int)1e9 + 2277, (int)1e9 + 9277};
const int N = 2e6 + 5;
int n;
string s;
int pref[2 * N];
int getIndex(char c) {
if (c == '(') return 1;
return 2;
}
int p_pow[2][2 * N], h[2][2 * N];
void precompute() {
for (int i = 0; i <= 1; i++) {
p_pow[i][0] = 1;
for (int j = 1; j <= 2 * n; j++) p_pow[i][j] = 1ll * p_pow[i][j - 1] * p % MOD[i];
}
for (int i = 0; i <= 1; i++) {
h[i][0] = 0;
for (int j = 1; j <= 2 * n; j++) h[i][j] = (1ll * h[i][j - 1] * p + getIndex(s[j])) % MOD[i];
}
}
ii getHash(int l, int r) {
ii ans;
ans.first = (h[0][r] - 1ll * h[0][l - 1] * p_pow[0][r - l + 1] % MOD[0] + MOD[0]) % MOD[0];
ans.second = (h[1][r] - 1ll * h[1][l - 1] * p_pow[1][r - l + 1] % MOD[1] + MOD[1]) % MOD[1];
return ans;
}
int seg[4 * 2 * N];
void build(int id, int l, int r) {
if (l == r) {
seg[id] = pref[l];
return;
}
int mid = (l + r) >> 1;
build(id * 2, l, mid);
build(id * 2 + 1, mid + 1, r);
seg[id] = min(seg[id * 2], seg[id * 2 + 1]);
}
int getMin(int id, int l, int r, int u, int v) {
if (l > v || r < u) return INF;
if (u <= l && r <= v) return seg[id];
int mid = (l + r) >> 1;
return min(getMin(id * 2, l, mid, u, v), getMin(id * 2 + 1, mid + 1, r, u, v));
}
int getSum(int l, int r) {
return pref[r] - pref[l - 1];
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
cin >> s;
s = ' ' + s + s;
for (int i = 1; i <= 2 * n; i++) {
int c = (s[i] == '(') ? 1 : -1;
pref[i] = pref[i - 1] + c;
}
precompute();
build(1, 1, 2 * n);
vector<ii> hs;
for (int i = 1; i <= n; i++) {
int l = i, r = i + n - 1;
bool is_balanced = ((getMin(1, 1, 2 * n, l, r) - pref[l - 1] >= 0) && (getSum(l, r) == 0));
if (is_balanced) hs.push_back(getHash(l, r));
}
sort(hs.begin(), hs.end());
hs.resize(unique(hs.begin(), hs.end()) - hs.begin());
cout << hs.size() << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IHAgPSA3OyAKY29uc3QgaW50IE1PRFsyXSA9IHsoaW50KTFlOSArIDIyNzcsIChpbnQpMWU5ICsgOTI3N307ICAKY29uc3QgaW50IE4gPSAyZTYgKyA1OyAgCgppbnQgbjsgICAKc3RyaW5nIHM7IAppbnQgcHJlZlsyICogTl07ICAKCmludCBnZXRJbmRleChjaGFyIGMpIHsKCWlmIChjID09ICcoJykgcmV0dXJuIDE7IAoJcmV0dXJuIDI7IAp9CgppbnQgcF9wb3dbMl1bMiAqIE5dLCBoWzJdWzIgKiBOXTsgCgp2b2lkIHByZWNvbXB1dGUoKSB7Cglmb3IgKGludCBpID0gMDsgaSA8PSAxOyBpKyspIHsKCQlwX3Bvd1tpXVswXSA9IDE7IAoJCWZvciAoaW50IGogPSAxOyBqIDw9IDIgKiBuOyBqKyspIHBfcG93W2ldW2pdID0gMWxsICogcF9wb3dbaV1baiAtIDFdICogcCAlIE1PRFtpXTsgCgl9CgoJZm9yIChpbnQgaSA9IDA7IGkgPD0gMTsgaSsrKSB7CgkJaFtpXVswXSA9IDA7IAoJCWZvciAoaW50IGogPSAxOyBqIDw9IDIgKiBuOyBqKyspIGhbaV1bal0gPSAoMWxsICogaFtpXVtqIC0gMV0gKiBwICsgZ2V0SW5kZXgoc1tqXSkpICUgTU9EW2ldOwoJfQp9CgppaSBnZXRIYXNoKGludCBsLCBpbnQgcikgewoJaWkgYW5zOyAKCWFucy5maXJzdCA9IChoWzBdW3JdIC0gMWxsICogaFswXVtsIC0gMV0gKiBwX3Bvd1swXVtyIC0gbCArIDFdICUgTU9EWzBdICsgTU9EWzBdKSAlIE1PRFswXTsgCglhbnMuc2Vjb25kID0gKGhbMV1bcl0gLSAxbGwgKiBoWzFdW2wgLSAxXSAqIHBfcG93WzFdW3IgLSBsICsgMV0gJSBNT0RbMV0gKyBNT0RbMV0pICUgTU9EWzFdOyAKCXJldHVybiBhbnM7IAp9CgppbnQgc2VnWzQgKiAyICogTl07Cgp2b2lkIGJ1aWxkKGludCBpZCwgaW50IGwsIGludCByKSB7CglpZiAobCA9PSByKSB7CgkJc2VnW2lkXSA9IHByZWZbbF07IAoJCXJldHVybjsgCgl9CglpbnQgbWlkID0gKGwgKyByKSA+PiAxOyAKCWJ1aWxkKGlkICogMiwgbCwgbWlkKTsgCglidWlsZChpZCAqIDIgKyAxLCBtaWQgKyAxLCByKTsgCglzZWdbaWRdID0gbWluKHNlZ1tpZCAqIDJdLCBzZWdbaWQgKiAyICsgMV0pOyAKfSAKCmludCBnZXRNaW4oaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCB1LCBpbnQgdikgewoJaWYgKGwgPiB2IHx8IHIgPCB1KSByZXR1cm4gSU5GOyAgIAoKCWlmICh1IDw9IGwgJiYgciA8PSB2KSByZXR1cm4gc2VnW2lkXTsgIAoKCWludCBtaWQgPSAobCArIHIpID4+IDE7ICAKCXJldHVybiBtaW4oZ2V0TWluKGlkICogMiwgbCwgbWlkLCB1LCB2KSwgZ2V0TWluKGlkICogMiArIDEsIG1pZCArIDEsIHIsIHUsIHYpKTsgCn0KCmludCBnZXRTdW0oaW50IGwsIGludCByKSB7CglyZXR1cm4gcHJlZltyXSAtIHByZWZbbCAtIDFdOwp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAgCQoJY2luID4+IG47IAoJY2luID4+IHM7IAoJcyA9ICcgJyArIHMgKyBzOyAKCglmb3IgKGludCBpID0gMTsgaSA8PSAyICogbjsgaSsrKSB7CgkJaW50IGMgPSAoc1tpXSA9PSAnKCcpID8gMSA6IC0xOyAgCgkJcHJlZltpXSA9IHByZWZbaSAtIDFdICsgYzsgIAoJfQoKCXByZWNvbXB1dGUoKTsgIAoJYnVpbGQoMSwgMSwgMiAqIG4pOyAgIAoKCXZlY3RvcjxpaT4gaHM7ICAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewoJCWludCBsID0gaSwgciA9IGkgKyBuIC0gMTsgIAoJCWJvb2wgaXNfYmFsYW5jZWQgPSAoKGdldE1pbigxLCAxLCAyICogbiwgbCwgcikgLSBwcmVmW2wgLSAxXSA+PSAwKSAmJiAoZ2V0U3VtKGwsIHIpID09IDApKTsgCgkJaWYgKGlzX2JhbGFuY2VkKSBocy5wdXNoX2JhY2soZ2V0SGFzaChsLCByKSk7IAoJfQoKCXNvcnQoaHMuYmVnaW4oKSwgaHMuZW5kKCkpOyAgIAoJaHMucmVzaXplKHVuaXF1ZShocy5iZWdpbigpLCBocy5lbmQoKSkgLSBocy5iZWdpbigpKTsgCgoJY291dCA8PCBocy5zaXplKCkgPDwgJ1xuJzsgCn0=