#include <bits/stdc++.h>
#define MAXN 600
using namespace std;

int n, m, cnt, d[5], col[MAXN][MAXN][2];
bool vis[MAXN][MAXN][2];

void dfs(int x, int y, int a, int b)
{
	if(x<0 || x>m || y<0 || y>m || vis[x][y][a]) return;
	vis[x][y][a]=true; col[x][y][a]=b;
	for(int i=0; i*i<=d[a]; i++)
	{
		int j=sqrt(d[a]-i*i);
		if(i*i+j*j!=d[a]) continue;
		dfs(x+i, y+j, a, 3-b);
		dfs(x-i, y+j, a, 3-b);
		dfs(x+i, y-j, a, 3-b);
		dfs(x-i, y-j, a, 3-b);
	}
}

void debug()
{
	for(int i=0; i<=m; i++)
	{
		for(int j=0; j<=m; j++) printf("%d ", col[i][j][0]);
		printf("\n");
	}
	printf("\n\n");
	for(int i=0; i<=m; i++)
	{
		for(int j=0; j<=m; j++) printf("%d ", col[i][j][1]);
		printf("\n");
	}
}

int main()
{
	scanf("%d%d%d", &n, &d[0], &d[1]);
	m=n*2-1;
	for(int i=0; i<=m; i++)
	for(int j=0; j<=m; j++)
	{
		if(!vis[i][j][0]) dfs(i, j, 0, 1);
		if(!vis[i][j][1]) dfs(i, j, 1, 1);
	}
	for(int i=0; i<=m; i++)
	for(int j=0; j<=m; j++)
	{
		if(col[i][j][0]==1 && col[i][j][1]==1)
		{
			printf("%d %d \n", i, j);
			if(++cnt==n*n) return 0;
		}
	}
} 