#include<iostream>
#include<vector>
#include<hash_map>
#include<algorithm>
#include<numeric>
using namespace std;
using namespace stdext;
struct VectorLess : public binary_function< int*, int*, bool>
{
public:
result_type operator()(const first_argument_type& _Left, const second_argument_type& _Right) const
{
int j;
for(int i=0;i<6;i++)
if(_Left[0]==_Right[i])
{
for(j=1;j<6;j++)
if(_Left[j]!=_Right[(i+j)%6])
break;
if(j==6)
return false;
for(j=1;j<6;j++)
if(_Left[j]!=_Right[(i-j)%6])
break;
if(j==6)
return false;
}
return true;
}
};
int main()
{
//cout<<++i++;
hash_map< int*,int,hash_compare< int*,VectorLess> > hpsnow;
int n;
do{cin>>n;}while(n<2);
bool flag=true;
while(n--){
int *temp=new int(6);
for(int i=0;i<6;i++){
cin>>temp[i];
}
if(hpsnow.empty())
hpsnow[temp]=1;
else if(hpsnow.count(temp)){
flag=false;
//break;
}
else
hpsnow[temp]=1;
}
if(flag)
cout<<"No two snowflakes are alike."<<endl;
else
cout<<"Twin snowflakes found."<<endl;
return 0;
}
#include<vector>
#include<hash_map>
#include<algorithm>
#include<numeric>
using namespace std;
using namespace stdext;
struct VectorLess : public binary_function< int*, int*, bool>
{
public:
result_type operator()(const first_argument_type& _Left, const second_argument_type& _Right) const
{
int j;
for(int i=0;i<6;i++)
if(_Left[0]==_Right[i])
{
for(j=1;j<6;j++)
if(_Left[j]!=_Right[(i+j)%6])
break;
if(j==6)
return false;
for(j=1;j<6;j++)
if(_Left[j]!=_Right[(i-j)%6])
break;
if(j==6)
return false;
}
return true;
}
};
int main()
{
//cout<<++i++;
hash_map< int*,int,hash_compare< int*,VectorLess> > hpsnow;
int n;
do{cin>>n;}while(n<2);
bool flag=true;
while(n--){
int *temp=new int(6);
for(int i=0;i<6;i++){
cin>>temp[i];
}
if(hpsnow.empty())
hpsnow[temp]=1;
else if(hpsnow.count(temp)){
flag=false;
//break;
}
else
hpsnow[temp]=1;
}
if(flag)
cout<<"No two snowflakes are alike."<<endl;
else
cout<<"Twin snowflakes found."<<endl;
return 0;
}