#include #include #include using namespace std; struct ElementType { int r, c, p; ElementType() {} ElementType(int __r, int __c, int __p) : r(__r), c(__c), p(__p) {} }; vector res; void Calc(int R1, int R2, int C1, int C2, int pr, int pc) { if (R1 == R2 && C1 == C2) return; int MR = (R1 + R2) >> 1; int MC = (C1 + C2) >> 1; if (pr <= MR && pc <= MC) { res.push_back(ElementType(MR + 1, MC + 1, 1)); Calc(R1, MR, C1, MC, pr, pc); Calc(R1, MR, MC + 1, C2, MR, MC + 1); Calc(MR + 1, R2, C1, MC, MR + 1, MC); Calc(MR + 1, R2, MC + 1, C2, MR + 1, MC + 1); return; } if (pr <= MR && pc > MC) { res.push_back(ElementType(MR + 1, MC, 2)); Calc(R1, MR, C1, MC, MR, MC); Calc(R1, MR, MC + 1, C2, pr, pc); Calc(MR + 1, R2, C1, MC, MR + 1, MC); Calc(MR + 1, R2, MC + 1, C2, MR + 1, MC + 1); return; } if (pr > MR && pc <= MC) { res.push_back(ElementType(MR, MC + 1, 3)); Calc(R1, MR, C1, MC, MR, MC); Calc(R1, MR, MC + 1, C2, MR, MC + 1); Calc(MR + 1, R2, C1, MC, pr, pc); Calc(MR + 1, R2, MC + 1, C2, MR + 1, MC + 1); return; } if (pr > MR && pc > MC) { res.push_back(ElementType(MR, MC, 4)); Calc(R1, MR, C1, MC, MR, MC); Calc(R1, MR, MC + 1, C2, MR, MC + 1); Calc(MR + 1, R2, C1, MC, MR + 1, MC); Calc(MR + 1, R2, MC + 1, C2, pr, pc); return; } } int main() { #ifdef local freopen("pro.in", "r", stdin); #endif int k, x, y; scanf("%d%d%d", &k, &x, &y); Calc(1, 1 << k, 1, 1 << k, x, y); for (int i = 0; i < res.size(); i++) printf("%d %d %d\n", res[i].r, res[i].c, res[i].p); return 0; }