#include <bits/stdc++.h>
#define ll long long
#define IOS ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
using namespace std;
int m,n;
vector<pair<int, int> > swaps;
struct node {
int a,b;
} arr[1001][1001];
int a[100010];
ll calc(int r) {
ll _a = 0, _b = 0, _1 = 0, _2 = 0;
for(int i=1; i<=m; i++) {
_a += arr[r][i].a;
_b += arr[r][i].b;
}
for(int i=1; i<=m; i++) {
_1 += (arr[r][i].a - _a/m) * (arr[r][i].a - _a/m);
_2 += (arr[r][i].b - _b/m) * (arr[r][i].b - _b/m);
}
return _1 * 1/m + _2 * 1/m;
}
int main() {
IOS
cin >> m >> n;
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
cin >> arr[i][j].a;
}
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
cin >> arr[i][j].b;
}
}
for(int i=1; i<=n; i++) {
a[i] = calc(i);
}
for (int i = 1; i <= n; i++) {
int maxi = i;
for (int j = i; j <= n; j++) {
if (a[maxi] < a[j]) {
maxi = j;
}
}
if (maxi != i) {
swaps.push_back({i, maxi});
swap(a[maxi], a[i]);
}
}
cout << swaps.size() << "\n";
for (auto &p : swaps) {
cout << p.first << " " << p.second << "\n";
}
return 0;
}