#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=101,M=100010;
int s[N][N],ans1[M],ans2[M],cnt;
int main()
{
ios::sync_with_stdio(0);
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>s[i][j];
for(int i=1;i<=n;i++)
{
if(s[i][1]>s[i][m])
{
ans1[++cnt]=0,ans2[cnt]=i;
int f[N]={0},cnt1=0;
for(int j=1;j<=m;j++)
f[j]=s[i][j];
for(int j=m;j>=1;j--)
s[i][++cnt1]=f[j];
}
}
for(int i=1;i<=n/2;i++)
{
for(int j=1;j<=m/2;j++)
{
int t[N]={0},a,b,c,d;
a=s[i][j],b=s[i][m-j+1],c=s[n-i+1][j],d=s[n-i+1][m-j+1];
t[a]++,t[b]++,t[c]++,t[d]++;
if(t[j]!=2||t[m-j+1]!=2)
{
cout<<"NO"<<endl;
return 0;
}
if(a==j&&c==j&&b==m-j+1&&d==m-j+1) continue;
if(a!=j&&c!=j&&b!=m-j+1&&d!=m-j+1)
{
ans1[++cnt]=0,ans2[cnt]=i;
ans1[++cnt]=1,ans2[cnt]=j;
ans1[++cnt]=1,ans2[cnt]=m-j+1;
ans1[++cnt]=0,ans2[cnt]=i;
ans1[++cnt]=1,ans2[cnt]=j;
ans1[++cnt]=1,ans2[cnt]=m-j+1;
continue;
}
if(a==j)
{
if(b==m-j+1)
{
ans1[++cnt]=1,ans2[cnt]=m-j+1;
ans1[++cnt]=0,ans2[cnt]=n-i+1;
ans1[++cnt]=1,ans2[cnt]=m-j+1;
ans1[++cnt]=0,ans2[cnt]=n-i+1;
}
else
{
ans1[++cnt]=0,ans2[cnt]=n-i+1;
ans1[++cnt]=1,ans2[cnt]=m-j+1;
ans1[++cnt]=0,ans2[cnt]=n-i+1;
ans1[++cnt]=1,ans2[cnt]=m-j+1;
}
}
else
{
if(b==m-j+1)
{
ans1[++cnt]=0,ans2[cnt]=i;
ans1[++cnt]=1,ans2[cnt]=m-j+1;
ans1[++cnt]=0,ans2[cnt]=i;
ans1[++cnt]=1,ans2[cnt]=m-j+1;
}
else
{
ans1[++cnt]=1,ans2[cnt]=m-j+1;
ans1[++cnt]=0,ans2[cnt]=i;
ans1[++cnt]=1,ans2[cnt]=m-j+1;
ans1[++cnt]=0,ans2[cnt]=i;
}
}
}
}
cout<<"YES"<<endl<<cnt<<endl;
for(int i=1;i<=cnt;i++)
{
cout<<ans1[i]<<" "<<ans2[i]<<endl;
}
return 0;
}