// author: phucan1402, 3:00 PM 11/10/2025 GMT + 7
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1e6;
string s;
struct node{
int couple;
int open;
int close;
node(int cp = 0, int o = 0, int c = 0) {
couple = cp;
open = o;
close = c;
}
};
node tree[4 * maxn + 5];
node merge(node l, node r) {
node res;
int new_cp = min(l.open, r.close);
res.couple = l.couple + r.couple + new_cp * 2;
res.open = l.open + r.open - new_cp;
res.close = l.close + r.close - new_cp;
return res;
}
void build(int id, int l, int r) {
if(l == r) {
if(s[l] == '(') {
tree[id] = node(0,1,0);
}
else tree[id] = node(0,0,1);
return;
}
int m = (l + r)/2;
build(2 * id, l, m);
build(2 * id + 1, m + 1, r);
tree[id] = merge(tree[id*2], tree[id*2+1]);
}
void update(int id, int l,int r, int pos) {
if(l == r) {
if(s[l] == '(') {
s[l] = ')';
tree[id] = node(0,0,1);
}
else {
s[l] = '(';
tree[id] = node(0,1,0);
}
return;
}
int m = (l + r)/2;
if(pos <= m) update(2*id,l,m,pos);
else update(2*id+1,m+1,r,pos);
tree[id] = merge(tree[2 * id], tree[2 * id + 1]);
}
node query(int id, int l, int r, int u, int v) {
if(l > v || r < u) return node();
if(u <= l && r <= v) return tree[id];
int m = (l + r)/2;
return merge(query(2*id,l,m,u,v), query(2*id+1,m+1,r,u,v));
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,m; cin >> n >> m;
cin >> s;
build(1,0,n-1);
while(m--) {
int type; cin >> type;
if(type == 1) {
int u,v; cin >> u >> v;
node ans = query(1,0,n-1,u-1,v-1);
if(ans.open == 0 && ans.close == 0) cout << 1;
else cout << 0;
}
else {
int u; cin >> u;
update(1,0,n-1,u-1);
}
}
return 0;
}
Ly8gYXV0aG9yOiBwaHVjYW4xNDAyLCAzOjAwIFBNIDExLzEwLzIwMjUgR01UICsgNwojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBtYXhuID0gMWU2OwpzdHJpbmcgczsKc3RydWN0IG5vZGV7CiAgICBpbnQgY291cGxlOwogICAgaW50IG9wZW47CiAgICBpbnQgY2xvc2U7CiAgICBub2RlKGludCBjcCA9IDAsIGludCBvID0gMCwgaW50IGMgPSAwKSB7CiAgICAgICAgY291cGxlID0gY3A7CiAgICAgICAgb3BlbiA9IG87CiAgICAgICAgY2xvc2UgPSBjOwogICAgfQp9Owpub2RlIHRyZWVbNCAqIG1heG4gKyA1XTsKbm9kZSBtZXJnZShub2RlIGwsIG5vZGUgcikgewogICAgbm9kZSByZXM7CiAgICBpbnQgbmV3X2NwID0gbWluKGwub3Blbiwgci5jbG9zZSk7CiAgICByZXMuY291cGxlID0gbC5jb3VwbGUgKyByLmNvdXBsZSArIG5ld19jcCAqIDI7CiAgICByZXMub3BlbiA9IGwub3BlbiArIHIub3BlbiAtIG5ld19jcDsKICAgIHJlcy5jbG9zZSA9IGwuY2xvc2UgKyByLmNsb3NlIC0gbmV3X2NwOwogICAgcmV0dXJuIHJlczsKfQp2b2lkIGJ1aWxkKGludCBpZCwgaW50IGwsIGludCByKSB7CiAgICBpZihsID09IHIpIHsKICAgICAgICBpZihzW2xdID09ICcoJykgewogICAgICAgICAgICB0cmVlW2lkXSA9IG5vZGUoMCwxLDApOwogICAgICAgIH0KICAgICAgICBlbHNlIHRyZWVbaWRdID0gbm9kZSgwLDAsMSk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IG0gPSAobCArIHIpLzI7CiAgICBidWlsZCgyICogaWQsIGwsIG0pOwogICAgYnVpbGQoMiAqIGlkICsgMSwgbSArIDEsIHIpOwogICAgdHJlZVtpZF0gPSBtZXJnZSh0cmVlW2lkKjJdLCB0cmVlW2lkKjIrMV0pOwp9CnZvaWQgdXBkYXRlKGludCBpZCwgaW50IGwsaW50IHIsIGludCBwb3MpIHsKICAgIGlmKGwgPT0gcikgewogICAgICAgIGlmKHNbbF0gPT0gJygnKSB7CiAgICAgICAgICAgIHNbbF0gPSAnKSc7CiAgICAgICAgICAgIHRyZWVbaWRdID0gbm9kZSgwLDAsMSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBzW2xdID0gJygnOwogICAgICAgICAgICB0cmVlW2lkXSA9IG5vZGUoMCwxLDApOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgbSA9IChsICsgcikvMjsKICAgIGlmKHBvcyA8PSBtKSB1cGRhdGUoMippZCxsLG0scG9zKTsKICAgIGVsc2UgdXBkYXRlKDIqaWQrMSxtKzEscixwb3MpOwogICAgdHJlZVtpZF0gPSBtZXJnZSh0cmVlWzIgKiBpZF0sIHRyZWVbMiAqIGlkICsgMV0pOwp9Cm5vZGUgcXVlcnkoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCB1LCBpbnQgdikgewogICAgaWYobCA+IHYgfHwgciA8IHUpIHJldHVybiBub2RlKCk7CiAgICBpZih1IDw9IGwgJiYgciA8PSB2KSByZXR1cm4gdHJlZVtpZF07CiAgICBpbnQgbSA9IChsICsgcikvMjsKICAgIHJldHVybiBtZXJnZShxdWVyeSgyKmlkLGwsbSx1LHYpLCBxdWVyeSgyKmlkKzEsbSsxLHIsdSx2KSk7Cn0KaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwogICAgaW50IG4sbTsgY2luID4+IG4gPj4gbTsKICAgIGNpbiA+PiBzOwogICAgYnVpbGQoMSwwLG4tMSk7CiAgICB3aGlsZShtLS0pIHsKICAgICAgICBpbnQgdHlwZTsgY2luID4+IHR5cGU7CiAgICAgICAgaWYodHlwZSA9PSAxKSB7CiAgICAgICAgICAgIGludCB1LHY7IGNpbiA+PiB1ID4+IHY7CiAgICAgICAgICAgIG5vZGUgYW5zID0gcXVlcnkoMSwwLG4tMSx1LTEsdi0xKTsKICAgICAgICAgICAgaWYoYW5zLm9wZW4gPT0gMCAmJiBhbnMuY2xvc2UgPT0gMCkgY291dCA8PCAxOwogICAgICAgICAgICBlbHNlIGNvdXQgPDwgMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGludCB1OyBjaW4gPj4gdTsKICAgICAgICAgICAgdXBkYXRlKDEsMCxuLTEsdS0xKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfQ==