#include "bits/stdc++.h"
using namespace std;
#define all(x) x.begin(),x.end()
#define pb push_back
#define ff first
#define ss second
#define fast ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define ar array
#define int long long 
#define F(i,a,b) for(i=a;i<b;++i)
#define RF(i,b,a) for(i=b;i>=a;--i) 
#define NL cout<<"\n";
#define INF LONG_LONG_MAX
#define pii pair<int,int>
#define vi vector<int>

typedef long long ll;
typedef long double ld;
const ll mod=1e9+7;
bool comp(ll a,ll b)
{
	return a<b;
}
ll fpow(ll a, ll b) {

	ll res=1;
	while(b) {
		if(b&1)
			res=(res*a);
		a=(a*a);
		b>>=1;
	}
	return res;
}

ll minm(ll a,ll b){
	if(a<b) return a;
	return b;
}

ll maxm(ll a,ll b){
	if(a>b){ return a;}
	else return b;
}

int PHI(int k){
	// This is Euler's Totient Function.
	//This function returns no. of coprime numbers to N in range [1,2,....,N]

	  int ans=k;
	  for(int i=2;i*i<=k;++i){
	  	if(k%i==0){
	  		ans-=ans/i;
	  		while(k%i==0){
	  			k/=i;
	  		}
	  	}
	  }
     if(k>1) ans-=ans/k;
     return ans;
 

}

void solve(){
  
   int n,i;
   cin >> n;
   
   vector<pii>ecells;
   vector<pii>ocells;
   
   for(i=1;i<=n;i++){
   	for(int j=1;j<=n;j++){
   		if((i+j)%2){
   			ocells.pb({i,j});
   		}
   		else ecells.pb({i,j});
   	}
   }
   
   // 1 even
   // 2,3 odd
   // if not possible ie all odd are filled, fill 2,3 in even
   
   int cnt=0;
   
   while(cnt<n*n){
   	int a; cin >> a;
   	
   	if(a==1){
   		 // try to fill 2 in odd cell 
   		 // if not possible , fill 3 in even
   		 if(ocells.empty()){
   		 	cout<<"3 "<<ecells.back().ff<<" "<<ecells.back().ss<<endl;
   		 	ecells.pop_back();
   		 }
   		 
   		 else{
   		 	cout<<"2 "<<ocells.back().ff<<" "<<ocells.back().ss<<endl;
   		 	ocells.pop_back();
   		 }
   		 ++cnt;
   	}
   	
   	else if(a==2){
   		// fill 1 in even , if possible
   		if(!ecells.empty()){
   			cout<<"1 "<<ecells.back().ff<<" "<<ecells.back().ss<<endl;
   			ecells.pop_back();
   		}
   		
   		else{
   			// fill 3 in ocells
   			cout<<"3 "<<ocells.back().ff<<" "<<ocells.back().ss<<endl;
   			ocells.pop_back();
   		}
   		cnt++;
   	}
   	else{
   		// fill 1 in even if possible
   		if(!ecells.empty()){
   			cout<<"1 "<<ecells.back().ff<<" "<<ecells.back().ss<<endl;
   			ecells.pop_back();
   		}
   		else{
   			// fill 2 in odd
   			cout<<"2 "<<ocells.back().ff<<" "<<ocells.back().ss<<endl;
   			ocells.pop_back();
   		}
   		cnt++;
   	}
   }
   
   

}


signed main(void)     
{

	fast;

  
	int _=1;
	//cin>>_;
 
      for(int test_case=1;test_case<=_;++test_case){
         solve();
      }
   
	
}