#include <bits/stdc++.h>

using namespace std;

using ll = long long;
#define dbg(x) cerr << #x << " " << x << "\n"
/**
2
RGB
RG
GB

3
RG-
G--
---

incercam sa umplem casutele de o anumita paritate cu R si B daca ne zice nu putem R => B altfel B => R
Vom umple total la un moment dat casutele de o anumita paritate => nu mai conteaza ce punem

**/

int get_banned () {
    int color;
    cin >> color;
    return color;
}
const int MAX_N = 100;
void put (int b, int i, int j) {
    cout << b << " " << i << " " << j << endl;
}
int a[1 + MAX_N][1 + MAX_N];
void solve_test () {
    int n;
    cin >> n;
    /// vrem cu 1 impar, 2 par
    int x1 = 1, y1 = 2, x2 = 1, y2 = 1;
    bool first_phase = true;
    int nr1 = 0, nr2 = 0;
    int full1 = (n * n) / 2, full2 = (n * n + 1) / 2;
    for (int step = 0; step < n * n; step++) {
        int banned = get_banned ();
        if (first_phase) {
            if (banned != 1) {
                nr1++;
                /// facem ceva impar cu 1
                a[x1][y1] = 1;
                put (1, x1, y1);
                y1 += 2;
                if (y1 > n) {
                    x1++;
                    if (x1 % 2 == 0)
                        y1 = 1;
                    else
                        y1 = 2;
                }
            }
            else {
                nr2++;
                /// facem ceva par cu 2
                a[x2][y2] = 2;
                put (2, x2, y2);
                y2 += 2;
                if (y2 > n) {
                    x2++;
                    if (x2 % 2 == 0)
                        y2 = 2;
                    else
                        y2 = 1;
                }
            }
            if (nr1 == full1 || nr2 == full2)
                first_phase = false;
        }
        else {
            /// second_phase
            if (nr1 == full1) {
                /// acum vom folosi doar 2 sau 3
                if (banned != 2) {
                    a[x2][y2] = 2;
                    put (2, x2, y2);
                }
                else {
                    a[x2][y2] = 3;
                    put (3, x2, y2);
                }
                y2 += 2;
                if (y2 > n) {
                    x2++;
                    if (x2 % 2 == 0)
                        y2 = 2;
                    else
                        y2 = 1;
                }
            }
            else {
                /// acum vom folosi doar 1 sau 3
                if (banned != 1) {
                    a[x1][y1] = 1;
                    put (1, x1, y1);
                }
                else {
                    a[x1][y1] = 3;
                    put (3, x1, y1);
                }
                y1 += 2;
                if (y1 > n) {
                    x1++;
                    if (x1 % 2 == 0)
                        y1 = 1;
                    else
                        y1 = 2;
                }
            }
        }
    }
}

int main () {
    ios::sync_with_stdio (false);
    cin.tie (0); cout.tie (0);
    int t= 1;
 ///   cin >> t;
    while (t--)
        solve_test ();
    return 0;
}
