#define PROBLEM "https://judge.yosupo.jp/problem/predecessor_problem"
#include"../../src/alfred/config/io-sync-off.hpp"
#include"../../src/alfred/data_structure/dynamic-bitset.hpp"
#include<iostream>std::stringT;intn,q,opt,x;intmain(intargc,charconst*argv[]){optimizeIO();std::cin>>n>>q>>T;DynamicBitsetbit(n);for(inti=0;i<n;i++){if(T[i]=='1')bit.set(i);}while(q--){std::cin>>opt>>x;if(opt==0){bit.set(x);}elseif(opt==1){bit.set(x,false);}elseif(opt==2){std::cout<<bit.test(x)<<'\n';}elseif(opt==3){std::cout<<bit.suf(x,true)<<'\n';}else{std::cout<<bit.pre(x,true)<<'\n';}}return0;}
#line 1 "verify/verify-yosupo-ds/yosupo-bitset.test.cpp"
#define PROBLEM "https://judge.yosupo.jp/problem/predecessor_problem"
#line 1 "src/alfred/config/io-sync-off.hpp"
#include<bits/stdc++.h>inlinevoidoptimizeIO(void){std::ios::sync_with_stdio(false);std::cin.tie(NULL),std::cout.tie(NULL);}#line 1 "src/alfred/data_structure/dynamic-bitset.hpp"
#line 7 "src/alfred/data_structure/dynamic-bitset.hpp"
// TODO: Implement resize and bitwise operators. Figure out how to mod.classDynamicBitset{private:usingWord_t=unsignedlonglong;constexprstaticintbw=sizeof(Word_t)*8;constexprstaticWord_tWORD_MAX=std::numeric_limits<Word_t>::max();size_tn,cnt;std::vector<Word_t>bits;inlineintcalc_len(void){return(std::max<size_t>(n,bw)+bw-1)/bw;}public:DynamicBitset(size_tN):n(N),bits(calc_len()){}inlineintsize(void){returnn;}inlineintcount(void){returncnt;}inlineinttest(size_ti){return(bits[i/bw]>>(i%bw))&1;}inlinevoidset(size_ti,boolval=true){if(test(i)==val)return;bits[i/bw]^=(1ULL<<(i%bw));val?cnt++:cnt--;}inlinevoidflip(size_ti){bits[i/bw]^=(1ULL<<(i%bw));test(i)?cnt--:cnt++;}inlinevoidreset(void){std::fill(bits.begin(),bits.end(),0);cnt=0;}inlinevoidclear(void){bits.clear(),cnt=n=0;}// find the previous val before i. returns -1 if not found.inlineintpre(size_ti,boolcontain=false,boolval=true){Word_tcur=bits[i/bw];for(intj=(int)(i%bw)-(!contain);j>=0;j--){if((cur>>j&1)==val){returni-(i%bw-j);}}for(intj=i/bw-1;j>=0;j--){if(bits[j]==(val?0:WORD_MAX))continue;for(intk=bw-1;k>=0;k--){if((bits[j]>>k&1)==val){returnj*bw+k;}}}return-1;}inlineintsuf(size_ti,boolcontain=false,boolval=true){Word_tcur=bits[i/bw];for(intj=i%bw+(!contain);j<bw;j++){if((cur>>j&1)==val){returni+(j-i%bw);}}constintlen=calc_len();for(intj=i/bw+1;j<len;j++){if(bits[j]==(val?0:WORD_MAX))continue;for(intk=0;k<bw;k++){if((bits[j]>>k&1)==val){returnj*bw+k;}}}return-1;}};#line 6 "verify/verify-yosupo-ds/yosupo-bitset.test.cpp"
std::stringT;intn,q,opt,x;intmain(intargc,charconst*argv[]){optimizeIO();std::cin>>n>>q>>T;DynamicBitsetbit(n);for(inti=0;i<n;i++){if(T[i]=='1')bit.set(i);}while(q--){std::cin>>opt>>x;if(opt==0){bit.set(x);}elseif(opt==1){bit.set(x,false);}elseif(opt==2){std::cout<<bit.test(x)<<'\n';}elseif(opt==3){std::cout<<bit.suf(x,true)<<'\n';}else{std::cout<<bit.pre(x,true)<<'\n';}}return0;}