#include <map>
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#define INF 10000000
using namespace std;
typedef long long LL;
map<string,int> idcache;
vector<string> setcache;
int ID(string& str){
if(idcache.count(str)) return idcache[str];
setcache.push_back(str);
return idcache[str]=setcache.size()-1;
}
struct node{
int x,y;
node(){}
node(int a,int b):x(a),y(b){}
bool operator <(const node& rhs)const{
return x<rhs.x||x==rhs.x&&y<rhs.y;
}
};
map<node,int> vis;
int n,m,maze[10010][15];
char te[100],str[100];
int main()
{
while(scanf("%d %d",&n,&m)==2){
gets(str);
idcache.clear();
setcache.clear();
for(int i=0;i<n;i++)
{
int jj=0;
gets(str);
int len=strlen(str),kk=0;
for(int j=0;j<len;j++){
if(str[j]!=','&&j!=len-1){
te[kk++]=str[j];
}
else{
if(j==len-1) te[kk++]=str[j];
te[kk]=0; string ss=te;
maze[i][jj++]=ID(ss);
kk=0;
}
}
}
bool flag=false;
for(int i=0;i<m;i++){
for(int j=i+1;j<m;j++){
vis.clear();
for(int k=0;k<n;k++){
node p(maze[k][i],maze[k][j]);
if(!vis.count(p)){
vis[p]=k;
}
else{
flag=true;
printf("NO\n");
printf("%d %d\n",vis[p]+1,k+1);
printf("%d %d\n",i+1,j+1);
break;
}
}
if(flag) break;
}
if(flag) break;
}
if(!flag) printf("YES\n");
}
return 0;
}
uva 1592
最新推荐文章于 2021-04-08 10:00:46 发布