#include #include #include #include using namespace std;const int N=1e5+5,P=99991;inline int read(){ int x=0,w=0;char ch=0; while(!isdigit(ch)) w|=ch=='-',ch=getchar(); while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar(); return w?-x:x;} int n,tot,tmp[12],snow[N][12],tail[N],last[N],minl[N];int minprs(int *a){ int i=0,j=1,k; while(i<6&&j<6){ for(k=0;k<6&&a[i+k]==a[j+k];++k) ; if(k==6) break; if(a[i+k]>a[j+k]){ i=i+k+1; if(i==j) ++i; } else{ j=j+k+1; if(i==j) ++j; } } return min(i,j);}bool cmp(int pa,int *a,int *b){ int pb,pc,c[12]; for(int i=0;i<12;++i) c[11-i]=b[i]; pb=minprs(b),pc=minprs(c); bool ok=true; for(int i=0;i<6;++i) if(a[pa+i]^b[pb+i]) ok=false; if(ok) return true; ok=true; for(int i=0;i<6;++i) if(a[pa+i]^c[pc+i]) ok=false; if(ok) return true; return false;}int Hash(int *a){ int sum=0; for(int i=0;i<6;++i){ sum=(sum+a[i])%P; //mul=(long long)mul*a[i]%P; } return sum;} bool insert(int *a){ int val=Hash(a); for(int p=tail[val];p;p=last[p]) if(cmp(minl[p],snow[p],a)) return true; ++tot; for(int i=0;i<12;++i) snow[tot][i]=a[i]; minl[tot]=minprs(snow[tot]); last[tot]=tail[val]; tail[val]=tot; return false;}int main(){ n=read(); for(int i=1;i<=n;++i){ for(int j=0;j<6;++j) tmp[j]=tmp[j+6]=read(); if(insert(tmp)){ puts("Twin snowflakes found."); return 0; } } puts("No two snowflakes are alike."); return 0;}