#include <fstream>
#include <iostream>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
fstream f1("immortal.in", ios::in);
fstream f2("immortal.out", ios::out);
int16_t n, m, I, a[23][23], ok=1;
struct deplasare
{
int16_t x, y;
}d[]={{0,0},{0,1},{1,0},{0,-1},{-1,0}};
struct solutii
{
int16_t x1, x2, y1, y2;
}sol[20];
///in sol memo luptele
void afis()
{
ok=0;
int16_t i;
for(i=1; i<I; i++)
f2<<sol[i].x1<<" "<<sol[i].y1<<" "<<sol[i].x2<<" "<<sol[i].y2<<"\n";
}
void fct(int16_t i, int16_t j, int16_t val1, int16_t val2, int16_t &fin1, int16_t &fin2)
{
if((i==0)&&(j==1))
{
fin1=val1;
fin2=val2+2;
}
if((i==0)&&(j==-1))
{
fin1=val1;
fin2=val2-2;
}
if((i==1)&&(j==0))
{
fin1=val1+2;
fin2=val2;
}
if((i==-1)&&(j==0))
{
fin1=val1-2;
fin2=val2;
}
}
void bkt(int16_t i, int16_t j, int16_t pas)
{
if(ok)
{
if(pas==I) afis();
else
{
int16_t k, o, p;
for(k=1; (k<=4)&&ok; k++)
if(a[i+d[k].x][j+d[k].y]==1)///alegi pe care nemuritor din vecinatatea sa sa il bata
{
fct(d[k].x, d[k].y, i, j, sol[pas].x2, sol[pas].y2);///fct gaseste poz unde ajunge nemuritorul
if( a[sol[pas].x2][ sol[pas].y2]==0)///daca pozitia pe care vrei sa o ocupe nem e libara
{
a[i][j]=0;
a[i+d[k].x][j+d[k].y]=0;
sol[pas].x1=i;
sol[pas].y1=j;
a[sol[pas].x2][ sol[pas].y2]=1;
for(o=1; (o<=n)&&ok; o++)
for(p=1; (p<=m)&&ok; p++)
if(a[o][p]==1) bkt(o, p, pas+1);
a[sol[pas].x2][ sol[pas].y2]=0;
a[i+d[k].x][j+d[k].y]=1;
a[i][j]=1;
}
}
}
}
}
void bordare()
{
int16_t i, j;
for(i=0; i<=n+1; i++)
{
a[i][0]=-1;
a[i][m+1]=-1;
}
for(j=0; j<=m+1; j++)
{
a[0][j]=-1;
a[n+1][j]=-1;
}
}
int main()
{
int16_t i, j, x, y;
f1>>n>>m>>I;
for(i=1; i<=I; i++)
{
f1>>x>>y;
a[x][y]=1;
}
bordare();
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
if(a[i][j]) bkt(i, j, 1);///nemuritoul de pe i,j sare la bataie
return 0;
}