//题目意思:给定一个数据库,查找是否存在不同的两行中对应的两列字符串相同,输出结果按照列枚举
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
int n,m;
int a[10005][11];
map<string,int>IDcache;//把字符串映射成ID
vector<string>Cache;//根据ID取相应的字符串
map< pair<int,int> ,int >mp;//把表格单元的(行列)映射成该行的值
int ID(string s)
{
if(IDcache.count(s)){return IDcache[s];}
Cache.push_back(s);//添加新的字符串
return IDcache[s]=Cache.size()-1;
}
int main()
{
while(cin>>n>>m)
{
getchar();//吃掉回车符
IDcache.clear();
Cache.clear();
memset(a,-1,sizeof(a));
for(int i=0;i<n;i++)
{
int num=0;
int pos=0;
string s;
getline(cin,s);
for(int j=0;j<int(s.length());j++)
{
if(s[j]==',')
{
string t=s.substr(pos,j-pos);//以逗号为间隔分离字符串
a[i][num++]=ID(t);//得到字符串的ID编号
pos=j+1;
}
}
string t=s.substr(pos,s.length()-pos);
a[i][num]=ID(t);
}
//枚举列c1和c2,然后从上到下扫描各行。
int flag=1;
for(int c1=0;c1<m;c1++)
{
for(int c2=c1+1;c2<m;c2++)
{
mp.clear();//选取两个新的列之后需要将mp清空
for(int r=0;r<n;r++)
{
if(mp.count(make_pair(a[r][c1],a[r][c2])))
{
cout<<"NO"<<endl;
cout<<mp[make_pair(a[r][c1],a[r][c2])]+1<<" "<<r+1<<endl;
cout<<c1+1<<" "<<c2+1<<endl;
flag=0;
}
else
{
mp[make_pair(a[r][c1],a[r][c2])]=r;
}
if(!flag)
{
break;
}
}
if(!flag){break;}
}
if(!flag){break;}
}
if(flag)
{
cout<<"YES"<<endl;
}
}
return 0;
}