#include <bits/stdc++.h>
using namespace std;
 
//Store in vector queens positions
//Check for attaks to return 0 or start searching for best positions
//Mark each position, diagonals, row and columns
//Only one queen per row/column/diagonal
 
//Time complexity -> O(n!)
//Space -> O(n)
 
bool backtrack(int row, int queens, bool col[8], bool diag1[15], bool diag2[15], vector<pair<int,int>>& positions) {
    if(queens == 8) return true;
    if(row >= 8) return false;
 
    bool hasQueen = false;
    for(auto &p : positions){
        if(p.first == row){
            hasQueen = true;
            break;
        }
    }
    if(hasQueen) return backtrack(row + 1, queens, col, diag1, diag2, positions);
 
    for(int c = 0; c < 8; c++){
        if(!col[c] && !diag1[row + c] && !diag2[row - c + 7]){
            col[c] = diag1[row + c] = diag2[row - c + 7] = true;
            positions.push_back({row, c});
            if(backtrack(row + 1, queens + 1, col, diag1, diag2, positions)) return true;
            col[c] = diag1[row + c] = diag2[row - c + 7] = false;
            positions.pop_back();
        }
    }
 
    return false;
}
 
int main() {
    int n;
    cin >> n;
 
    vector<pair<int,int>> positions;
    bool col[8] = {false};
    bool diag1[15] = {false};
    bool diag2[15] = {false};
 
    for(int i = 0; i < n; i++){
        int x, y;
        cin >> x >> y;
        x--; y--;
        if(col[y] || diag1[x + y] || diag2[x - y + 7]){
            cout << 0;
            return 0;
        }
        positions.push_back({x, y});
        col[y] = true;
        diag1[x + y] = true;
        diag2[x - y + 7] = true;
    }
 
    if(!backtrack(0, n, col, diag1, diag2, positions)){
        cout << 0;
        return 0;
    }
 
    for(auto &p : positions){
        cout << p.first + 1 << " " << p.second + 1 << endl;
    }
 
    return 0;
}
				I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovL1N0b3JlIGluIHZlY3RvciBxdWVlbnMgcG9zaXRpb25zCi8vQ2hlY2sgZm9yIGF0dGFrcyB0byByZXR1cm4gMCBvciBzdGFydCBzZWFyY2hpbmcgZm9yIGJlc3QgcG9zaXRpb25zCi8vTWFyayBlYWNoIHBvc2l0aW9uLCBkaWFnb25hbHMsIHJvdyBhbmQgY29sdW1ucwovL09ubHkgb25lIHF1ZWVuIHBlciByb3cvY29sdW1uL2RpYWdvbmFsCgovL1RpbWUgY29tcGxleGl0eSAtPiBPKG4hKQovL1NwYWNlIC0+IE8obikKCmJvb2wgYmFja3RyYWNrKGludCByb3csIGludCBxdWVlbnMsIGJvb2wgY29sWzhdLCBib29sIGRpYWcxWzE1XSwgYm9vbCBkaWFnMlsxNV0sIHZlY3RvcjxwYWlyPGludCxpbnQ+PiYgcG9zaXRpb25zKSB7CiAgICBpZihxdWVlbnMgPT0gOCkgcmV0dXJuIHRydWU7CiAgICBpZihyb3cgPj0gOCkgcmV0dXJuIGZhbHNlOwoKICAgIGJvb2wgaGFzUXVlZW4gPSBmYWxzZTsKICAgIGZvcihhdXRvICZwIDogcG9zaXRpb25zKXsKICAgICAgICBpZihwLmZpcnN0ID09IHJvdyl7CiAgICAgICAgICAgIGhhc1F1ZWVuID0gdHJ1ZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgaWYoaGFzUXVlZW4pIHJldHVybiBiYWNrdHJhY2socm93ICsgMSwgcXVlZW5zLCBjb2wsIGRpYWcxLCBkaWFnMiwgcG9zaXRpb25zKTsKCiAgICBmb3IoaW50IGMgPSAwOyBjIDwgODsgYysrKXsKICAgICAgICBpZighY29sW2NdICYmICFkaWFnMVtyb3cgKyBjXSAmJiAhZGlhZzJbcm93IC0gYyArIDddKXsKICAgICAgICAgICAgY29sW2NdID0gZGlhZzFbcm93ICsgY10gPSBkaWFnMltyb3cgLSBjICsgN10gPSB0cnVlOwogICAgICAgICAgICBwb3NpdGlvbnMucHVzaF9iYWNrKHtyb3csIGN9KTsKICAgICAgICAgICAgaWYoYmFja3RyYWNrKHJvdyArIDEsIHF1ZWVucyArIDEsIGNvbCwgZGlhZzEsIGRpYWcyLCBwb3NpdGlvbnMpKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgY29sW2NdID0gZGlhZzFbcm93ICsgY10gPSBkaWFnMltyb3cgLSBjICsgN10gPSBmYWxzZTsKICAgICAgICAgICAgcG9zaXRpb25zLnBvcF9iYWNrKCk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBmYWxzZTsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgbjsKICAgIGNpbiA+PiBuOwoKICAgIHZlY3RvcjxwYWlyPGludCxpbnQ+PiBwb3NpdGlvbnM7CiAgICBib29sIGNvbFs4XSA9IHtmYWxzZX07CiAgICBib29sIGRpYWcxWzE1XSA9IHtmYWxzZX07CiAgICBib29sIGRpYWcyWzE1XSA9IHtmYWxzZX07CgogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CiAgICAgICAgaW50IHgsIHk7CiAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICB4LS07IHktLTsKICAgICAgICBpZihjb2xbeV0gfHwgZGlhZzFbeCArIHldIHx8IGRpYWcyW3ggLSB5ICsgN10pewogICAgICAgICAgICBjb3V0IDw8IDA7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBwb3NpdGlvbnMucHVzaF9iYWNrKHt4LCB5fSk7CiAgICAgICAgY29sW3ldID0gdHJ1ZTsKICAgICAgICBkaWFnMVt4ICsgeV0gPSB0cnVlOwogICAgICAgIGRpYWcyW3ggLSB5ICsgN10gPSB0cnVlOwogICAgfQoKICAgIGlmKCFiYWNrdHJhY2soMCwgbiwgY29sLCBkaWFnMSwgZGlhZzIsIHBvc2l0aW9ucykpewogICAgICAgIGNvdXQgPDwgMDsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBmb3IoYXV0byAmcCA6IHBvc2l0aW9ucyl7CiAgICAgICAgY291dCA8PCBwLmZpcnN0ICsgMSA8PCAiICIgPDwgcC5zZWNvbmQgKyAxIDw8IGVuZGw7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=