struct Seg { int val[4*N]; bool rev[4*N]; void init( int id, int l, int r, int *b ) { rev[id]=0; if ( l==r ) { val[id]=b[l]; return; } int m=(l+r)/2; init(id*2,l,m,b); init(id*2+1,m+1,r,b); val[id]=val[id*2]+val[id*2+1]; } int get( int id, int l, int r ) { if ( !rev[id] ) return val[id]; else return (r-l+1)-val[id]; } void push( int id, int l, int r ) { if ( !rev[id] ) return; rev[id*2]^=1; rev[id*2+1]^=1; rev[id]=0; } void pull( int id, int l, int r ) { int m=(l+r)/2; val[id]=get(id*2,l,m)+get(id*2+1,m+1,r); } int get( int id, int l, int r, int ql, int qr ) { if ( qr<l || ql>r ) return 0; if ( ql<=l && r<=qr ) return get(id,l,r); push(id,l,r); int m=(l+r)/2,ret=0; ret+=get(id*2,l,m,ql,qr); ret+=get(id*2+1,m+1,r,ql,qr); pull(id,l,r); return ret; } void chg( int id, int l, int r, int ql, int qr ) { if ( qr<l || ql>r ) return; if ( ql<=l && r<=qr ) { rev[id]^=1; return; } push(id,l,r); int m=(l+r)/2; chg(id*2,l,m,ql,qr); chg(id*2+1,m+1,r,ql,qr); pull(id,l,r); } } seg[22];