#include <bits/stdc++.h>
using namespace std;
#define ll long long

int n, k;
int dx[] = {-1, -2, -2, -1, 1, 2, 2, 1};
int dy[] = {-2, -1, 1, 2, 2, 1, -1, -2};
set<pair<int, int> > soluciones;

bool ok(int x, int y) {
    if(x >= 0 && x < n && y >= 0 && y < n)
        return true;
    return false;
}

void f(int x, int y, int i) { //i = cuantos pasos le quedan al caballo
    if(i == k) {
        soluciones.insert({x, y});
        return;
    }else{
        //recorremos las 8 posiciones del caballo
        for(int j = 0; j < 8; j++){
            int nx = x + dx[j]; //nueva posicion en x
            int ny = y + dy[j]; //nueva posicion en y
            if(ok(nx, ny)) { //verifica que el caballo no se haya salido del tablero
                f(nx, ny, i + 1);
            }
        }
    }

}

int main(){
    /*
    Un caballo está en la celda (0,0) de un tablero de ajedrez n*n. 
    Es decir, en la esquina superior izquierda, tienes que decir el número de casillas que 
    puede alcanzar el caballo con exactamente k movimientos.
    */
    cin >> n >> k;
    f(0, 0, 0);
    for(pair<int, int> x : soluciones) {
        cout << x.first << " " << x.second << "\n";
    }
    return 0;
}
