#include #include using namespace std; int i, j, n, q, op, x, y, arb[400005], lazy[400005], rsval, rsx, rsy, poz, st, dr, pivot, sum; void update(int left, int right, int nod) { if(lazy[nod]) { if(left != right) { lazy[2 * nod] ^= 1; lazy[2 * nod + 1] ^= 1; } arb[nod] = (right - left + 1) - arb[nod]; lazy[nod] = 0; } if(left > right || left > y || right < x || x > y) return ; if(x <= left && y >= right) { arb[nod] = (right - left + 1) - arb[nod]; if(left != right) { lazy[2 * nod] ^= 1; lazy[2 * nod + 1] ^= 1; } return; } int pivot = (left + right) / 2; update(left, pivot, 2 * nod); update(pivot + 1, right, 2 * nod + 1); arb[nod] = arb[2 * nod] + arb[2 * nod + 1]; } int query(int left, int right, int nod) { if(lazy[nod]) { if(left != right) { lazy[2 * nod] ^= 1; lazy[2 * nod + 1] ^= 1; } arb[nod] = (right - left + 1) - arb[nod]; lazy[nod] = 0; } if(x > y) return 0; if(x <= left && right <= y) return arb[nod]; int pivot = (left + right) / 2; int gmb = 0, fnc = 0; if(x <= pivot) gmb = query(left, pivot, 2 * nod); if(y > pivot) fnc = query(pivot + 1, right, 2 * nod + 1); return gmb + fnc; } int main() { for(scanf("%d%d", &n, &q); q; --q) { scanf("%d", &op); if(op == 1) { scanf("%d%d", &x, &y); update(1, n, 1); continue; } if(op == 2) { scanf("%d", &poz); x = y = poz; rsval = query(1, n, 1); st = 1; dr = poz - 1; rsx = poz; /*while(st <= dr) { pivot = (st + dr) / 2; x = pivot; y = poz; sum = query(1, n, 1); if(!rsval) sum = (y - x + 1) - sum; if(sum == y - x + 1) rsx = pivot, dr = pivot - 1; else st = pivot + 1; } */ st = poz + 1; dr = n; rsy = poz; /* while(st <= dr) { pivot = (st + dr) / 2; x = poz; y = pivot; sum = query(1, n, 1); if(!rsval) sum = (y - x + 1) - sum; if(sum == y - x + 1) rsy = pivot, st = pivot + 1; else dr = pivot - 1; }*/ printf("%d %d %d\n", rsval, rsx, rsy); } } return 0; }