#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define llu unsigned long long
#define ld double
#define llu unsigned long long
#define rep(i,x,y)  for(int i=int(x);i<int(y);++i)
#define For(i,x,y)  for(int i=int(x);i<=int(y);++i)
#define FOr(i,x,y)  for(int i=int(x);i>=int(y);--i)
#define pi acos(-1) 
#define mk make_pair
#define pa pair<ll,ll>
#define lf else if
#define IL inline
#define max(x,y)    ((x)<(y)?(y):(x))
#define min(x,y)    ((x)<(y)?(x):(y))
#define sqr(x)      ((x)*(x))
#define Mul(x,y)    ((x)=1LL*(x)*(y)%mod)
#define Add(x,y)    ((x)=((x)+(y))%mod)
#define Max(x,y)    ((x)=((x)<(y)?(y):(x)))
#define Min(x,y)    ((x)=((x)>(y)?(y):(x)))
#define E(x)        return writeln(x),0
#define LL			(long long)
#define p(x)        printf("~%lld~\n",LL(x))
#define pp(x,y)     printf("~~%lld %lld~~\n",LL(x),LL(y))
#define ppp(x,y,z)  printf("~~~%lld %lld %lld~~~\n",LL(x),LL(y),LL(z))
#define pppp(a,b,c,d)	printf("~~~%lld %lld %lld %lld\n",LL(a),LL(b),LL(c),LL(d))
#define f_in(x)     freopen(x".in","r",stdin)
#define f_out(x)    freopen(x".out","w",stdout)
#define open(x)     f_in(x),f_out(x)
#define fi first
#define se second
#define GuYue		puts("\nGuYueNa________________________________________________________________________________")
typedef complex<double> E;
namespace cqz{
#ifdef LOCAL
    struct _{_(){freopen("cf.in","r",stdin);}}_; 
#endif 
#define NEG 1
    static const int GYN=2333333;
    char SZB[GYN],*SS=SZB,*TT=SZB;
    inline char gc(){   if (SS==TT){  TT=(SS=SZB)+fread(SZB,1,GYN,stdin); if (SS==TT) return '\n';  }   return *SS++;    }
#if NEG
    inline ll read(){    ll x=0,g=1; char ch=gc();   for (;!isdigit(ch);ch=gc()) if (ch=='-') g=-1;  for (;isdigit(ch);ch=gc())  x=x*10-48+ch;   return x*g; }
    inline void write(ll x){    if (x<0) putchar('-'),x=-x;  if (x>=10)   write(x/10);    putchar(x%10+'0');  }
#else
    inline ll read(){    ll x=0; char ch=gc();   for (;!isdigit(ch);ch=gc());    for (;isdigit(ch);ch=gc())  x=x*10-48+ch;   return x;   }
    inline void write(ll x){    if (x>=10)   write(x/10);    putchar(x%10+'0');  }
#endif
    inline char readchar(){ char ch=gc();   for(;isspace(ch);ch=gc());  return ch;  }
    inline ll readstr(char *s){ char ch=gc();   int cur=0;  for(;isspace(ch);ch=gc());      for(;!isspace(ch);ch=gc())  s[cur++]=ch;    s[cur]='\0';    return cur; }
	void Print(long long *a,int s,int t){For(i,s,t)printf("%lld ",a[i]);}
	void Print(int *a,int s,int t){For(i,s,t)printf("%d ",a[i]);}
	void Print(char *a,int s,int t){For(i,s,t)putchar(a[i]);}
	void writeln(ll x){write(x);puts("");}
}using namespace cqz;
const ll N=10000000;
#define ID(x,y)	((x)*(2*n)+(y))
vector<ll>g1,g2,g3,g4,ans,g[N];
ll col[N],guyue[N],n,d1,d2;
ll Ok(ll x){return sqr((ll)(sqrt(x)+0.0001))==x;}
void insert(ll x,ll y){g[x].push_back(y);}
void paint(ll x,ll Col){
	col[x]=Col;
	rep(i,0,g[x].size())if (!col[g[x][i]])
		paint(g[x][i],3-Col);
}
void Get(ll x){
	rep(i,0,4*n*n)g[i].clear();
	vector<pa>g;
	For(i,-x,x)if (Ok(x-i*i)){
		ll a=i,b=sqrt(x-i*i+0.0001);
		if (b)g.push_back(mk(a,b)),g.push_back(mk(a,-b));
		else  g.push_back(mk(a,b));
	}
	rep(i,0,2*n)rep(j,0,2*n)rep(k,0,g.size()){
		ll sx=i+g[k].fi,sy=j+g[k].se;
		if (sx<0||sy<0||sx>=2*n||sy>=2*n)continue;
		insert(ID(i,j),ID(sx,sy));
	}
	rep(i,0,4*n*n)if (!col[i])paint(i,1);
}
int main(){
	n=read(),d1=read(),d2=read();
	Get(d1);
	memcpy(guyue,col,sizeof col);
	memset(col,0,sizeof col);
	Get(d2);
	For(i,1,n*n*4)
	if (guyue[i]==1&&col[i]==1)	g1.push_back(i);
	lf (guyue[i]==2&&col[i]==1)	g2.push_back(i);
	lf (guyue[i]==1&&col[i]==2)	g3.push_back(i);
	else						g4.push_back(i);

	if (g1.size()>=n*n)	ans.assign(g1.begin(),g1.end());
	lf (g2.size()>=n*n)	ans.assign(g2.begin(),g2.end());
	lf (g3.size()>=n*n)	ans.assign(g3.begin(),g3.end());
	else				ans.assign(g4.begin(),g4.end());
	rep(i,0,n*n)write(ans[i]/(2*n)),putchar(' '),writeln(ans[i]%(2*n));
}
/*
0 0 







*/

Measured memory_bytes: 502968