rt.
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=1e5+10;
char buf[15000005],*p1(0),*p2(0);
#define gc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1500004, stdin), p1 == p2) ? EOF : *p1++)
template<typename T>inline void read(T&x){
x=0;
char c;
bool f=0;
do{
c=gc();
if(c=='-') f=1;
}while(c<'0');
do{
x=(x<<3)+(x<<1)+c-'0';
c=gc();
}while(c>='0');
if(f) x=~x+1;
}
ll n,m,k;
ll a[N];
double l[N];
vector<pair<ll,ll> > ans;
int main(){
read(m),read(n);
for(int i=1;i<=n;i++){
double op=0;
for(int j=1;j<=m;j++){
read(a[j]);
op+=a[j];
}
op/=m;
for(int j=1;j<=m;j++){
l[i]+=(a[j]-op)*(a[j]-op);
}
l[i]/=m;
}
for(int i=1;i<=n;i++){
double op=0;
for(int j=1;j<=m;j++){
read(a[j]);
op+=a[j];
}
op/=m;
for(int j=1;j<=m;j++){
l[i]+=(a[j]-op)*(a[j]-op);
}
l[i]/=m;
}
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
if(l[j]<l[i]){
swap(l[i],l[j]);
ans.push_back({i,j});
}
}
}
k=ans.size();
printf("%lld\n",k);
for(auto v:ans){
printf("%lld %lld\n",v.first,v.second);
}
return 0;
}