#include<cstdio>
#include<cstring>

using namespace std;
const int maxn=100010;
const int P=100007;

int head[P],cnt;
int snow[maxn][6];

int n;
struct node{
	int to,next;
}e[maxn];

void init(){
	cnt=0;
	memset(head,-1,sizeof(head));
}

void addhash(int val,int i){  
	
	e[++cnt].to=i;
	e[cnt].next=head[val];
	
	head[val]=cnt;
}

int cmp(int a,int b){ 
	
	int i,j;
	for(int i=0;i<6;i++){
		
		if(snow[a][0]==snow[b][i]){
			
			for(j=1;j<6;j ++){ //顺时针 
				
				if(snow[a][j]!=snow[b][(j + i)%6]){
					
					break;
				}
			}
			if(j==6){
				return 1;
			}
			for(j=1;j<6;j ++){ //逆时针 
				if(snow[a][6-j]!=snow[b][(j+i)%6]){
					
					break;
				}
			}
			if(j==6){
				return 1;
			}
		}
	}
	return 0;
}

bool find(int i){
	
	int key,sum=0;
	for(int j=0;j<6;j ++){
		
		sum+=snow[i][j];
	}
	key=sum%P;
	
	for(int j=head[key];j;j = e[j].next){
		
		if(cmp(i,e[j].to)){
			return 1;
		}
	}
	addhash(key,i);
	return 0;
}

int main(){
	
	scanf("%d", &n);
	
	int flag=0;
	int sum,key;
	
	for(int i=0;i<n;i++){
		
		for(int j=0;j<6;j ++){
			
			scanf("%d", &snow[i][j]);
		}
		if(find(i)){
			
			flag=1;
			break;   
		}
	}
	if(flag){
		puts("Twin snowflakes found.");
	}
	else{
		puts("No two snowflakes are alike.");
	}
	return 0;
}


/**************************************************************
	Problem: 2353
	User: caizhihao
	Language: C++
	Result: Accepted
	Time:5 ms
	Memory:4660 kb
****************************************************************/