#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <climits>
#include <cstring>
using namespace std;
int n, m;
string ans = "";
struct {
int f;
int number;
} all[1000000];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> m >> n;
double a[n + 1][m + 1], b[n + 1][m + 1];
double counta[n + 1] = {}, countb[n + 1] = {}, averagea[n + 1], averageb[n + 1], geta = 0, getb = 0, s2a = 0, s2b = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> a[i][j];
counta[i] = counta[i] + a[i][j];
}
averagea[i] = counta[i] / m;
}
for (int k = 1; k <= n; k++) {
for (int l = 1; l <= m; l++) {
cin >> b[k][l];
countb[k] = countb[k] + b[k][l];
}
averageb[k] = countb[k] / m;
}
for (int g1 = 1; g1 <= n; g1++) {
for (int g3 = 1; g3 <= m; g3++) {
geta = geta + pow((a[g1][g3] - averagea[g1]), 2);
getb = getb + pow((b[g1][g3] - averageb[g1]), 2);
}
s2a = geta / m;
s2b = getb / m;
all[g1].number = g1;
all[g1].f = s2a + s2b;
geta = 0;
getb = 0;
}
int max = INT_MIN, min = INT_MAX, maxnumber, minnumber, left = 1, right = m, times = 0, to;
bool flag = 1;
int gg;
while (1) {
flag = 1;
for (int i = 1; i < n; i++) {
gg = i + 1;
if (all[i].f > all[i + 1].f) {
swap(all[i].f, all[i + 1].f);
flag = false;
ans = ans + to_string(i);
ans = ans + " ";
ans = ans + to_string(i + 1);
ans = ans + "\n";
times++;
}
}
if (flag)
break;
}
cout << times << endl;
cout << ans;
return 0;
}