#include <bits/stdc++.h>
using namespace std;

int n, m, line[int(2e5) + 5], temp[401];
vector <int> tsifri[401];
vector <int> gruppi[401];
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

	cin >> n >> m;
    for(int i = 0; i < n * m; i++) cin >> line[i];
    int firstt = -1;
    for(int i = 0; i < n * m; i+=m) {
        for(int z = 0; z < m+1; z++) temp[z] = 0;
        for(int j = 0; j < m; j++) {
            temp[line[i+j]]++;
            if(temp[line[i+j]] > 1) {if(line[i+j] == 1 && firstt == -1) firstt = i+j; else tsifri[line[i+j]].push_back(i+j);}
        }
        for(int z = 1; z <= m; z++) {
            if(temp[z] == 0) gruppi[i/m].push_back(z);
        }
    }
    int y = 0;
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < gruppi[i].size(); j++) {
            y++;
        }
    }
    /*for(int i = 1; i <= m; i++) {
        for(int j = 0; j < tsifri[i].size(); j++)
            cout << tsifri[i][j] << ' ';
        cout << "\n";
    }*/
    cout <<y+1 << '\n'<<firstt +1<< ' ' << n*m + 1 << '\n';
    while(gruppi[firstt/m].size() != 0) {
        int chislo = gruppi[firstt/m][gruppi[firstt/m].size() - 1];
        gruppi[firstt/m].pop_back();
        if(tsifri[chislo].size() == 0) {cout << n*m + 1 << ' ' << firstt+1; return 0;}
        if(gruppi[tsifri[chislo][tsifri[chislo].size() - 1]/m].back() == 1 && tsifri[chislo].size() >= 2) {
            cout << tsifri[chislo][tsifri[chislo].size() - 2]+1 << ' ' <<firstt+1 << "\n";
            firstt = tsifri[chislo][tsifri[chislo].size() - 2];
            tsifri[chislo].erase(tsifri[chislo].end() - 2);
        } else {
            cout << tsifri[chislo][tsifri[chislo].size() - 1]+1 << ' ' << firstt +1<< "\n";
            firstt = tsifri[chislo][tsifri[chislo].size() - 1];
            tsifri[chislo].pop_back();
        }
    }
}
