#include <stdio.h>

int a[256][256], z;

void rput(int y, int x, int v, int t, int l, int b, int r) {
    int m, c, n;
    m = (t + b) >> 1;
    c = (l + r) >> 1;
    if (t == b)
        a[y][x] = v;
    else {
        n = ++z;
        if (y <= m && x <= c)
            rput(y, x, v, t, l, m, c);
        else
            rput(m, c, n, t, l, m, c);
        if (y > m && x <= c)
            rput(y, x, v, m + 1, l, b, c);
        else
            rput(m + 1, c, n, m + 1, l, b, c);
        if (y <= m && x > c)
            rput(y, x, v, t, c + 1, m, r);
        else
            rput(m, c + 1, n, t, c + 1, m, r);
        if (y > m && x > c)
            rput(y, x, v, m + 1, c + 1, b, r);
        else
            rput(m + 1, c + 1, n, m + 1, c + 1, b, r);
    }
}

int main(void) {
    int k, y, x;
    scanf("%d%d%d", &k, &y, &x);
    k = (1 << k) - 1;
    z = 0;
    rput(y, x, 0, 0, 0, k, k);
    for (y = 0; y <= k; y++)
        for (x = 0; x <= k; x++)
            printf("%d%c", a[y][x], " \n"[x == k]);
    return 0;
}
