#include<bits/stdc++.h>
#define ll long long
#define M 100001
using namespace std;
struct nb{
ll n,v,w,q;
}ed[M<<3];
ll pop=1,tnt,n,m,ppp,s,t,ho[M],head[M],dep[M],vis[M],dis[M],pre[M],fff[M],qq,pp;
queue<ll>q;
void add(ll a,ll b,ll c,ll d)
{
ed[++pop]=nb{head[a],b,c,d};head[a]=pop;
ed[++pop]=nb{head[b],a,0,-d};head[b]=pop;
}
bool SPEA()
{
for(ll i=1;i<=t+6000;i++)dis[i]=-1e18;
dis[s]=0;fff[s]=1e18;q.push(s);
memset(vis,0,sizeof(vis));
while(!q.empty())
{
ll u=q.front();q.pop();vis[u]=0;
for(ll i=head[u];i;i=ed[i].n)
{
ll v=ed[i].v;
if(dis[v]<dis[u]+ed[i].q&&ed[i].w)
{
dis[v]=dis[u]+ed[i].q;
fff[v]=min(ed[i].w,fff[u]);
pre[v]=i;
if(!vis[v])
{
vis[v]=1;
q.push(v);
}
}
}
}return dis[t]!=-1e18;
}
ll ans,a[101][101];
void dfs()
{
ll x=t,y,z;
while(x!=s)
{
ll i=pre[x];ho[ed[i^1].v]=x;
ed[i].w-=fff[t];
ed[i^1].w+=fff[t];
x=ed[i^1].v;
}
ans+=fff[t]*dis[t];
x=ho[x];
while(x!=t)
{
ll y=x;x=ho[x];
if(x>4000)
{
x-=4000;
if(x==y+1&&qq!=1)printf("%lld %lld\n",tnt,1);
if(x==y+qq)printf("%lld %lld\n",tnt,0);
}
else
{
if(x==y+1&&qq!=1)printf("%lld %lld\n",tnt,1);
if(x==y+qq)printf("%lld %lld\n",tnt,0);
}
}
}
ll f(ll i,ll j){return (i-1)*qq+j;}
int main()
{
cin>>n>>qq>>pp;t=pp*qq,s=t+1;add(s,1,1,0);
for(ll i=1;i<=pp;i++)
for(ll j=1;j<=qq;j++)
scanf("%lld",&a[i][j]);
for(ll i=1;i<=pp;i++)
for(ll j=1;j<=qq;j++)
{
if(a[i][j]==0)
{
if(i!=pp&&a[i+1][j]!=1)add(f(i,j),f(i+1,j),1e18,0);
if(j!=qq&&a[i][j+1]!=1)add(f(i,j),f(i,j+1),1e18,0);
}
if(a[i][j]==2)
{
add(f(i,j)+4000,f(i,j),1,1);
if(i!=1&&a[i-1][j]!=1)add(f(i-1,j),f(i,j)+4000,1e18,0);
if(j!=1&&a[i][j-1]!=1)add(f(i,j-1),f(i,j)+4000,1e18,0);
if(i!=pp&&a[i+1][j]!=1)add(f(i,j),f(i+1,j),1e18,0);
if(j!=qq&&a[i][j+1]!=1)add(f(i,j),f(i,j+1),1e18,0);
}
}
while(SPEA())
{
tnt++;add(s,1,1,0);
dfs();if(tnt==n)break;
}
}