#include <iostream>
#include <vector>							//Just for sample agent
#include <time.h>							//Just for sample agent

using namespace std;

class Cell {								//Class for working with game board cells
public:
	int Row;
	int Column;
	int Side;
};

void Initialize();							//Initialize essential variables
void CheckRectangle(int,int,int);			//Check if the rectangle is achieved
void CheckForAchivements(int,int,int,int);	//Check for achievements
void UpdateBoard(int,int,int,int);			//Update board changes after decisions
void Decide();								//Agent decision computings

int Board[15][15][5] = {0};					//Game board
int ROW = 0;								//Number of dots in each column
int COLUMN = 0;								//Number of dots in each row
int MyTurn = 0;								//Your agent turn number
int HisTurn = 0;							//Opponent's agent turn number

int main()
{
	srand(time(0));							//Just for sample agent

	Initialize();
	while(true)
	{
		int row=0,column=0,side=0;
		cin >> row >> column >> side;

		if(row == -1 && column == -1 && side == -1)
			Decide();
		else
			UpdateBoard(row,column,side,HisTurn);
	}
}


void Initialize()
{
	cin >> ROW >> COLUMN >> MyTurn;
	
	if(MyTurn == 1)
		HisTurn = 2;
	else
		HisTurn = 1;
}

void CheckRectangle(int row,int column,int turn)
{
	if(		Board[row][column][1] != 0 
		&&	Board[row][column][2] != 0 
		&&	Board[row][column][3] != 0
		&&	Board[row][column][4] != 0	)
			Board[row][column][0] = turn;
}

void CheckForAchivements(int row,int column,int side,int turn)
{
	CheckRectangle(row,column,turn);
	switch(side)
	{
	case 1:
		if (column - 1 >= 0)
			CheckRectangle(row,column-1,turn);
		break;
	case 2:
		if (row - 1 >= 0)
			CheckRectangle(row-1,column,turn);
		break;
	case 3:
		if (column + 1 <= COLUMN - 2)
			CheckRectangle(row,column+1,turn);
		break;
	case 4:
		if (row + 1 <= ROW - 2)
			CheckRectangle(row+1,column,turn);
		break;
	}
}

void UpdateBoard(int row,int column,int side,int turn)
{
	Board[row][column][side] = turn;
	switch(side)
	{
	case 1:
		if (column - 1 >= 0)
			Board[row][column-1][3] = turn;
		break;
	case 2:
		if (row - 1 >= 0)
			Board[row-1][column][4] = turn;
		break;
	case 3:
		if (column + 1 <= COLUMN - 2)
			Board[row][column+1][1] = turn;
		break;
	case 4:
		if (row + 1 <= ROW - 2)
			Board[row+1][column][2] = turn;
		break;
	}
	CheckForAchivements(row,column,side,turn);
}

void Decide()
{
	//Agent Computings Here
	//You must print 3 integers indicating Row, Column and Side. Separate them with blank space.

	//Sample computing
	vector<Cell> EmptyCells;
	for(int i=0;i<ROW-1;i++)
	{
		for(int j=0;j<COLUMN-1;j++)
		{
			for(int k=1;k<5;k++)
			{
				if(Board[i][j][k] == 0)
				{
					Cell c;
					c.Row = i; c.Column = j; c.Side = k;
					EmptyCells.push_back(c);
				}
			}
		}
	}
	Cell selected = EmptyCells[rand()%EmptyCells.size()];

	//Print out agent decision
	cout << selected.Row << " " << selected.Column << " " << selected.Side << endl;

	//Updating board according to your agent decision
	UpdateBoard(selected.Row,selected.Column,selected.Side,MyTurn);
}
