semeru/Code-Code-CloneDetection-POJ104 huggingface dataset:
int main()
{
	int n;
	char a[600];
	int ans[600]={0},mm=0;
	scanf("%d",&n);
	scanf("%s",&a);
	int i;
	i=0;
	int l=strlen(a);
	while (i+n<=l)
	{
		int j;
		ans[i]=1;
		for (j=i+1;j+n<=l;j++)
		{
			int ff=1;
			int k;
			for (k=0;k<n;k++)
			{
				if (a[i+k]!=a[j+k])
				{
					ff=0;break;
				}
			}
			if (ff) ans[i]++;
		}
		if (ans[i]>mm) mm=ans[i];
		i++;
	}
	if (mm>1)
	{
	printf("%d\n",mm);
	for (i=0;i+n<=l;i++)
	{
		if (ans[i]==mm)
		{
			int k;
			for (k=i;k<i+n;k++) printf("%c",a[k]);
			printf("\n");
		}
	}
	}
	else printf("NO");
	
	return 0;
}
struct bac
{
	int num;
	int d;
	char a[5];
};
int main()
{
	struct bac abb[260];
    struct bac temp; 
	int i,j,b,k,len,n;
	char str[500],dd[6]={0};
	scanf("%d",&n);
	getchar();
	gets(str);
	len=strlen(str);
	b=len-n;
	for(i=0;i<260;i++){
		abb[i].d=1;
		for(j=0;j<5;j++)
			abb[i].a[j]='\0';
	}
	for(i=0;i<=b;i++){
		k=i;
		for(j=0;j<n;j++){
			abb[i].a[j]=str[k];
			k++;
		}
	//	abb[i].a[j+1]='\0';
	}
	for(i=0;i<b;i++){
		abb[i].d=0;
		for(j=i+1;j<=b;j++){
			if(strcmp(abb[i].a,abb[j].a)==0){
				abb[i].d++;
			}
		}
	}
	for(i=0;i<b;i++){
		for(j=0;j<b-1-i;j++){
			if(abb[j].d<abb[j+1].d){
				temp=abb[j];
				abb[j]=abb[j+1];
				abb[j+1]=temp;
				
			}
		}
	}
	if(abb[0].d>0){
		printf("%d\n",abb[0].d+1);
		for(i=0;i<b;i++)
			if (abb[i].d==abb[0].d)printf("%s\n",abb[i].a);
	}
	else printf("NO");
	return 0;
}
void main()
{
	int n;
	scanf("%d\n",&n);
	char a[600];
	gets(a);
	int l=strlen(a);
	int i,j,k,l2=l-n+1;
	int N[600];
	for(i=0;i<l2;i++) N[i]=0;
	for(i=0;i<l2;i++)
		for(j=i+1;j<l2;j++)
		{
			int flag=1;
			for(k=0;k<n;k++)
				if(a[j+k]!=a[i+k]) {flag=0; break;}
			if(flag==0) continue;
			else N[i]=N[i]+1;
		}
	int max=N[0];

	for(i=0;i<l2;i++)
		if(N[i]>max) max=N[i];
	
	if(max==0) printf("NO\n");
		else{
		printf("%d\n",max+1);
	for(i=0;i<l2;i++)
		if(N[i]==max)
		{
			for(j=i;j<i+n;j++)
				printf("%c",a[j]);
			printf("\n");
	}}
}
struct chain
{
	char sp[6];
	int num;
};
void bubble(struct chain a[],int n)
{
	int i,j;
	struct chain temp;
	for(i=n-1;i>0;i--)
	{
		for(j=0;j<=i;j++)
		{
			if(a[j].num<a[j+1].num)
			{
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
	}
}
int main()
{
	struct chain a[500];
	int i,j,k;
	char s[501];
	char c[6];
	char c1;
	for(i=0;i<=500;i++)
		a[i].num=1;
	scanf("%d",&k);
	scanf("%s",s);
	for(i=0;i<=strlen(s)-k;i++)
	{
		for(j=0;j<k;j++)
		{
			c[j]=s[i+j];
		}
		c[j]='\0';
		strcpy(a[i].sp,c);
	
	}
	for(i=0;i<strlen(s)-k;i++)
	{
		for(j=i+1;j<=strlen(s)-k;j++)
		{
			if(strcmp(a[i].sp,a[j].sp)==0)
			{
				a[i].num++;
			
			}
		}
	}
	bubble(a,strlen(s)-k);
	if(a[0].num>1)
	{
		printf("%d\n",a[0].num);
		printf("%s\n",a[0].sp);
    	for(i=1;i<=strlen(s)-k;i++)
		{
    		if(a[i].num==a[0].num&&(strcmp(a[i].sp,a[i-1].sp)!=0))
	    		printf("%s\n",a[i].sp);
		}
	}
	else printf("NO");
	return 0;
}
//********************************
//*???n-gram????    **
//*?????? 1300012757 **
//*???2013.12.12 **
//********************************
int n;
int num[200] = {0};   //????????????

void search(char (*s)[5],int j)
{
	extern int n,num[200];
	int count = 0;

	for(int i =1;i<j;i++)
		if(*(*(s+j)) == *(*(s+i)))
		{
			count = 1;
			for(int x = 1; x<n;x++)
			{
				if(*(*(s+j)+x) != *(*(s+i)+x))
					count = 0;
			}
			if( count  == 0)
				continue;
			else
			{
				(*(num+i)) ++;
				return;
			}
		}
	(*(num+j)) ++;
}

int main()
{
	extern int n,num[200];
	cin >> n;
	cin.get();      //???

	char s[200][5];
	char c[500];
	char *p = c;

	int i =1;
	while((*(p+i) = cin.get())!= '\n')      //?????
		i++;

	for(int j = 1; j <=i-n+1; j++)
	{
		for(int x= 0;x<n;x++)
		{
			*(*(s+j)+x) = *(p+j+x);
		}
		search(s,j);
	}
	int max = 0;
	for(int j = 1;j<=i-n+1;j++)
	{
		if(*(num + j) > max)
			max = *(num + j);
	}
	if(max  == 1)
		cout<<"NO"<<endl;
	else
	{
		cout<< max<<endl;
	for(int j = 1; j<i-n+1;j++)
	{
		if(*(num + j) == max)
			for(int x= 0;x<n;x++)
			cout<< *(*(s+j)+x);
		cout<<endl;
	}

	}
	return 0;
}
int main(){
int m,n,k,i,j,x,y,z;
z=0;
scanf("%d",&n);
char a[500];
scanf("%s",a);
m=strlen(a);
int c[m-n+1];
for(i=0;i<m-n+1;i++)c[i]=0;
char b[m-n+1][n];
for(i=0;i<m-n+1;i++){
   for(j=0;j<n;j++){      
      b[i][j]=a[j+i];
      }
   }
for(i=0;i<m-n+1;i++){
   for(j=i;j<m-n+1;j++){
       x=0;
       for(k=0;k<n;k++){
          if(b[i][k]==b[j][k])x++;
          }
       if(x==n)c[i]++;
       }
   }
for(i=0;i<m-n+1;i++){
   y=0;              
   for(j=0;j<m-n+1;j++){
       if(c[i]>=c[j])y++;
       }
   if(y==(m-n+1)&&c[i]!=1&&z==0){
      printf("%d\n",c[i]);
      z=1;
      }
   if(y==(m-n+1)&&c[i]!=1){
      for(j=0;j<n-1;j++)printf("%c",b[i][j]);
      printf("%c\n",b[i][n-1]);
      }
   if(y==(m-n+1)&&c[i]==1){
   printf("NO");
   break;
}
   }  
scanf("%d",&i);
return 0;
}
int main()
{
int n,x=0,pp,count[550]={0},max=0;
scanf("%d\n",&n);
char a[550],b[550][10]={0},c[10];
c[n]=0;
gets(a);
for (int i=0;i+n<=strlen(a);i++)
    {
    pp=0;
    for (int j=0;j<n;j++)
        {
        c[j]=a[i+j];
        }
    for (int k=0;k<x;k++)
        {
        if (strcmp(c,b[k])==0) {pp=1;count[k]++;break;}
        }
    if (pp==0) {strcpy(b[x],c);x++;}
    }
for (int i=0;i<x;i++)
    {
    if (count[i]>max) max=count[i];
    }
if (max!=0)
{printf("%d\n",max+1);
for (int i=0;i<x;i++)
    {
    if (count[i]==max) printf("%s\n",b[i]);
    }
}
else printf("NO");
}
int main()
{
	int n;
	int i,j,l,k=0;
	char s[600];
	char a[500][6];
	int b[500];
	scanf ("%d",&n);
	getchar();
	gets(s);
	l=strlen(s);
	for (i=0;i<l-n+1;i++)
	{
		for (j=0;j<n;j++)
			a[k][j]=s[i+j];
		k++;
	
	}
	for (i=0;i<l-n;i++)
	{
		int p=1;
		for (j=i+1;j<l-n+1;j++)
		{
			if (strcmp(a[i],a[j])==0)
				p++;
		}
		b[i]=p;
	}
	int m=0;
	for (i=0;i<l-n;i++)
	{
		if (b[i]>m)
			m=b[i];
	}
	if (m==1)
		printf ("NO");
	else
	{
		printf ("%d\n",m);
		for (i=0;i<l-n;i++)
		{
			if (b[i]==m)
			{
				puts(a[i]);
				printf ("\n");
			}

		}
	}
	return 0;
}
char a[502], b[502][6], c[502];
int main()
{
	int n, j, i, m;
	char *p=a, (*q)[6]=b, *r=c;
	cin>>n;
	cin>>a;
	int len=strlen (a);
	for(i=0; i<=len-n; i++)
		for(j=0; j<n; j++)
			q[i][j]=*(p+i+j);

	for(i=0; i<=len-n; i++)
		for(j=i+1; j<=len-n; j++)
			if(strcmp(q[i] , q[j])==0)
				r[i]++;

	int max=c[0];
	for(i=0; i<=len-n; i++)
		if(max<r[i])
			max=r[i];

	if(max<=0)
		cout<<"NO";

	else{
			cout<<max+1<<endl;
			for(i=0; i<len-n; i++)
				if(r[i]==max)
					cout<<q[i]<<endl;
		}
	return 0;
}
int main()
{
	char word[500]={'\0'},a[500][5]={'\0'};
	int i,j,n,m[500]={0},mm=0;
	scanf("%d",&n);
	scanf("%s",word);
	for(i=0;i<=strlen(word)-n;i++)
		for(j=0;j<n;j++)
			a[i][j]=word[i+j];
	for(i=0;i<=strlen(word)-n;i++)
		for(j=i;j<=strlen(word)-n;j++)
			if(strcmp(a[i],a[j])==0)
				m[i]++;
	for(i=0;i<=strlen(word)-n;i++)
		if(mm<m[i])
			mm=m[i];
	if(mm!=1)
	{
		printf("%d\n",mm);
	for(i=0;i<=strlen(word)-n;i++)
	{
		if(m[i]==mm)
		{
			for(j=0;j<n;j++)
				printf("%c",a[i][j]);
			printf("\n");
		}
	}
	}
	else printf("NO");
	return 0;
}
int main()
{
	char a[600],c[600][7];
	int max=0,temp,n,m,i,j,num[600]={0},shu=0;
	scanf("%d\n",&n);
	gets(a);
	m=strlen(a);
	for(i=0;i<=m-n;i++)
		for(j=0;j<n;j++)
			c[i][j]=a[i+j];
	for(i=0;i<=m-n;i++)
		c[i][n]=0;
	for(i=0;i<=m-n;i++)
		for(j=i;j<m;j++)
			if(strcmp(c[i],c[j])==0)
				num[i]++;
	for(i=0;i<=m-n;i++)
		if(num[i]>max)
			max=num[i];
	if(max==1)
		printf("NO");
	else
	{
		for(i=0;i<=m-n;i++)
			if(num[i]==max)
				shu++;
	}
	if(max!=1)
	{
		printf("%d\n",max);
		for(i=0;i<=m-n;i++)
			if(num[i]==max)
			{
					puts(c[i]);
					putchar('\n');
			}
	}
}
int main()
{
	int n,i,j,k,len,sum[500]={0},p,max=0;
	char temp[5],a[500];
	scanf("%d\n",&n);
	gets(a);
	len=strlen(a);
	for(i=0;i<len-n+1;i++)
	{
		for(j=0;j<n;j++)
			temp[j]=a[i+j];
		for(j=i;j<len-n+1;j++)
		{
			p=0;
			for(k=0;k<n;k++)
				if(temp[k]==a[j+k])
					p=1;
				else
				{
					p=0;
					break;
				}
			if(p)
				sum[i]++;
		}			
	}
	for(i=0;i<len-n+1;i++)
		if(sum[i]>max)
			max=sum[i];
	if(max==1)
		printf("NO");
	else
	{
		printf("%d\n",max);
		for(i=0;i<len-n+1;i++)
			if(sum[i]==max)
			{
				for(j=0;j<n;j++)
					printf("%c",a[i+j]);
				printf("\n");
			}
	}
	return 0;
}
int main()
{
   int i,j,k,l,m,n,x;
   char a[1000];
   int c[1000]={0};
   int d[1000]={0};
   char b[1000][1000];
   scanf("%d",&m);
   scanf("%s",a);
   n=strlen(a);
   l=n+1-m;
   for(i=0;i<l;i++)
      {
          for(j=0;j<m;j++)
             {
                 b[i][j]=a[i+j];
             }
      }
   for(i=0;i<l;i++)
      {
          for(j=i+1;j<l;j++)
             {                             
                 for(k=0,x=0;k<m;k++)
                    {
                        if(b[i][k]==b[j][k])
                        {x=x+1;} 
                    }
                 if(x==m)
                 {c[i]++;}  
                 d[i]=c[i];
             }
      }
   for(i=0;i<l;i++)
      {
          for(j=0;j<l-1;j++)
             {
                 if(c[j]>c[j+1])
                   {
                       x=c[j+1];
                       c[j+1]=c[j];
                       c[j]=x;
                   }  
             }
      }
   x=c[l-1];
   if(x==0)
   {printf("NO");}
   else
   {
   
   
   printf("%d\n",x+1);
   for(i=0;i<l;i++)
      {
          if(d[i]==x)
          {
                for(k=0;k<m;k++)
                   {
                     printf("%c",b[i][k]);
                   }
                printf("\n");
          }
      }
}
}
int i , j , n , len , sum[ 600 ] , big ;
char s[600] , ts[7];
char *p1 , *p2;

int main(){
	scanf("%d\n", &n );
	scanf("%s" , s );
	len=strlen(s);
	memset(sum,0,sizeof(sum));
	big=-1;
	for (i=0;i+n-1<len;i++){
		if (sum[i]<0)continue;
		sum[i]=0;
		p1=&s[i];
		for (j=i+1;j+n-1<len;j++){
			p2=&s[j];
			if (strncmp(p1,p2,n)==0){
				sum[i]++;
				sum[j]=-1;
			}
		}
		if (sum[i]>big)big=sum[i];
	}
	if (big==0){
		printf("NO");
		return 0;
	}
	printf("%d\n", big+1 );
	for (i=0;i+n-1<len;i++)
		if (sum[i]==big){
			p1=&s[i];
			strncpy( ts , p1 , n );
			printf("%s\n", ts );
		}
				
	return 0;

}
int main()
{
   int i,j,k,max,n,l1,l;
   char c,s[1000];
   char a[1000][1000];
   int b[1000];
   scanf("%d",&n);
   scanf("%s",s);
   l1=strlen(s);
   j=0;
   memset(a,0,sizeof(a));
   l=l1-n+1;
   for (i=0;i<=l1-n;i++)
   {
      for  (j=0;j<n;j++)
      a[i][j]=s[i+j];
       }       
   memset(b,0,sizeof(b));    
   for (i=0;i<l;i++)
   {
       k=0;
       for (j=0;j<i;j++)
       if (strcmp(a[i],a[j])==0) 
       {
          b[j]++;
          k=1;
          break;
          }
       if (k==0) b[i]++;                            
    }
    max=0;
   for (i=0;i<l;i++) if (max<b[i]) max=b[i];
   if (max==1) printf("NO");
   else 
   {
        printf("%d\n",max);
        for (i=0;i<l;i++)
        if (b[i]==max) printf("%s\n",a[i]); 
}
  
}
int main()
{
	int n,len,max=1,cnt,num,sofar=1;
	char tmp,c[501],gram[5],maxc[250][5];
	int i,j,k;
	scanf("%d",&n);
	gram[n]='\0';
	tmp=getchar();
	gets(c);
	len=strlen(c);
	for (i=0;i<=len-n;i++)
	{
		for (j=0;j<n;j++) gram[j]=c[i+j];
		cnt=1;
		for (j=i+1;j<=len-n;j++)
		{
			if (c[j]==gram[0])
			{
				num=0;
				for (k=1;k<n;k++)
				{
					if (c[j+k]!=gram[k]) {num++;break;}
				}
				if (num==0) cnt++;
			}
		}
		if (cnt>max) {max=cnt;strcpy(maxc[0],gram);sofar=1;}
		else if (cnt==max) {sofar++;strcpy(maxc[sofar-1],gram);}
	}		
	if (max==1) printf("NO\n");
	else
	{
		printf("%d\n",max);
		for (j=0;j<sofar;j++)
		{
			for (k=0;k<n;k++) printf("%c",maxc[j][k]);	
			printf("\n");
		}
	}
		
		
	return 0;
}
int main(int argc, char* argv[])
{
	int i,j,n,s,max,l,k,r,t;
	char str[501],x,y,z;
	scanf("%d",&n);
	scanf("%s",str);
	l=strlen(str);
	max=0;
	for(i=0;i<l-n+1;i++)
	{
		s=0;
		for(j=i+1;j<l-n+1;j++)
		{
			t=0;
			for(r=0;r<n;r++)
			{
				if(str[i+r]==str[j+r])
					t++;
			}
			if(t==n)
			{
				s++;
			}
		}
		if(s>max)
		{
			max=s;
		}
	}
	if(max==0)
	{
		printf("NO");
		return 0;
	}
	else
	{
	printf("%d\n",max+1);
	for(i=0;i<l-n+1;i++)
	{
		s=0;
		x=str[i];
		y=str[i+1];
		z=str[i+2];
		for(j=i+1;j<l-n+1;j++)
		{	
			t=0;
			for(r=0;r<n;r++)
			{
			
				if(str[i+r]==str[j+r])
					t++;
			}
			if(t==n)
			{
				s++;
			}
		}
		if(s==max)
		{
			for(r=0;r<n;r++)
			{
				printf("%c",str[i+r]);
			}
			printf("\n");
		}
	}
	return 0 ;
	}
}
int main()
{
	 int len=0,n,i,j,k,m=0,h=0,r=0,d=0,q=0,a[500];
	 scanf("%d",&n);
	 char c[501];
	 gets(c);
	 gets(c);
	 len=strlen(c);     
     for(i=0;i<len-n;i++)
	 {
		 m=0;
		 for(j=i+1;j<=len-n;j++)
		 {
			 r=0;
			 for(k=0;k<n;k++)
			 {
				 if(c[i+k]==c[j+k])
                 {
					 r=r++;
				 }
			 }
			 if(r==n)
			 {m=m++;}
		 }
		 a[i]=m;
	 }
	 /*for(i=0;i<len-n;i++)
	 {
		 printf("%d",a[i]);
	 }*/
	  for(i=0;i<len-n;i++)
		 {
		 d=0;
		 for(j=0;j<len-n;j++)
		 {
			 if(a[i]>=a[j])
			 {d=d++;}
		 }
		 if(d==len-n)
		 {
              h=a[i]+1;
			  break;
		 }
		 }
	 if(h<=1)
	 {
		 printf("NO\n");
	 }
	 else
	 {
		 for(i=0;i<len-n;i++)
		 {
		 d=0;
		 for(j=0;j<len-n;j++)
		 {
			 if(a[i]>=a[j])
			 {d=d++;}
		 }
		 if(d==len-n)
		 {
              h=a[i]+1;
			  break;
		 }
		 }
	 printf("%d\n",h);
	 for(i=0;i<len-n;i++)
	 {
		 d=0;
		 for(j=0;j<len-n;j++)
		 {
			 if(a[i]>=a[j])
			 {
				 d=d++;
			 }
		 }
		 if(d==len-n)
		 {
			 for(k=i;k<i+n;k++)
			 {
				 printf("%c",c[k]);
			 }
			 
			 printf("\n");
		 }
		
	 }
	 if(d==len-n)
		 {
              if(h==1)
			 {
				 for(q=len-n;q<len;q++)
				 printf("%c",c[q]);
			 }
		 }
	 }
	 return 0;
}
char c[500][500]={{' '}};
int  a[500]={0},count=0,n,max=0;
char tp[300]={' '};
char target[501]={' '};
void getstring(int start,int n)
{int i,j,k,l,m;
 strcpy(tp," ");
 for (i=0;i<n;i++)
	 tp[i]=target[start+i];
}
void find()
{int i,j,k,l,m,flag=0;
	for (i=1;i<=count;i++)
		if(strcmp(c[i],tp)==0) {a[i]++;flag=7;break;}
	if (flag==0) {count++;strcpy(c[count],tp);a[count]++;}
}
void findmax()
{int i,j,k,l,m;
 for (i=1;i<=count;i++)
	if (a[i]>max) max=a[i];
}
void print()
{int i;
if (max<=1) printf("NO");
else {printf("%d\n",max);
      for (i=1;i<=count;i++)
		  if (a[i]==max) printf("%s\n",c[i]);
	}
}
int main()
{int i,j,k,l,m;
 scanf("%d\n",&n);
 gets(target);
 l=strlen(target);
 for (i=0;i<=l-n;i++)
 {getstring(i,n);
  find();
 }
 findmax();
 print();
 return 7;
}
void com(char a[][5],int n,int k);
int main()
{
  int n;
  scanf("%d",&n);
  scanf("\n");
  char c[500];
  gets(c);
  char a[500][5];
  int i,j;
  for(i=0;c[i+n-1]!='\0';i++)
  {
	  for(j=0;j<n;j++)
	  {
    a[i][j]=c[i+j];
	  } 
	  a[i][n]='\0';
  }
  int k;
  k=strlen(c);
com(a,n,k);
  return 0;
}

void com(char a[][5],int n,int k)
{
  int i,j,l=0,p;
  int fre[500]={1};
  for(i=0;i<k-n+1;i++)
  {
	  fre[i]=1;
	if(a[i][0]!='\0')
	{
    for(j=0;j<k-n+1;j++)
	{
	   if(j!=i&&a[j][0]!='\0')
	   {
		   l=0;
	     for(p=0;p<n;p++)
		 {
		   if(a[j][p]!=a[i][p]) l=l+1;
		 }
		 if(l==0) {fre[i]=fre[i]+1;a[j][0]='\0';}
	   }
	}
	}
  }
  int max=fre[0];
  for(i=0;i<k-n+1;i++)
  {
	  if(fre[i]>max) max=fre[i];
  }
  if(max>1)
  {
  printf("%d",max);
  
  for(i=0;i<k-n+1;i++)
  {
	  
    if(fre[i]==max) 
	{
		putchar('\n');
		printf("%s",a[i]);
	}
  }
  }
  else
	  printf("NO");

}
int main()
{
	int n,l,i,j,m,t,count[600]={0};
	char str[600],gram[600][6],c[10];
	scanf("%d",&n);
	gets(c);
	gets(str);
	l=strlen(str);
	for(i=0;i+n<=l;i++)
	{
		for(j=0;j<n;j++)
			gram[i][j]=str[i+j];
		gram[i][n]='\0';
	}
	m=i;
	for(i=0;i<m-1;i++)
	{
		for(j=i+1;j<m;j++)
			if(gram[i][0]!='\0'&&strcmp(gram[i],gram[j])==0)
			{
				gram[j][0]='\0';
				count[i]+=1;
			}
	}
	for(i=0;i<m-1;i++)
		for(j=0;j<m-1-i;j++)
			if(count[j]<count[j+1])
			{
				t=count[j];count[j]=count[j+1];count[j+1]=t;
				strcpy(gram[500+i],gram[j]);strcpy(gram[j],gram[j+1]);strcpy(gram[j+1],gram[500+i]);
			}
	if(count[0]==0)
	{
		printf("NO\n");
	}
	else
	{
		i=0;
		printf("%d\n",count[0]+1);
		while(count[i]==count[0])
		{
			printf("%s\n",gram[i]);
			i++;
		}
	}
	return 0;
}
int main()
{
    int m,n,i,j,k,p,max;
    char a[500];
    int b[500]={0};
    scanf("%d\n",&n);
    scanf("%s",a);
    m=strlen(a);
    for(i=0;i<=m-n;i++)
    {
                      for(j=i+1;j<m;j++)
                      {
                                            if(a[i]==a[j])
                                            {
                                                          for(k=1;k<n;k++)
                                                          {
                                                                            if(a[i+k]!=a[j+k])
                                                                            {
                                                                                             p=0;break;
                                                                            }
                                                                            else p=1;
                                                          }
                                                          if(p==1)b[i]=b[i]+1;
                                            }
                      }
    }
        max=0;
        for(i=0;i<=m-n;i++)
        {
                            if(max<b[i])max=b[i];
        }
        if(max==0)printf("NO");
        else
        {
                 printf("%d\n",max+1);
                 for(i=0;i<=m-n;i++)
                 {
                                   if(b[i]==max)
                                   {
                                                for(k=0;k<n;k++)
                                                {
                                                                printf("%c",a[i+k]);
                                                }
                                                printf("\n");
                                   }
                 }
        }
    return 0;
}
int main()
{
	int n,i,j,t,max,count[600],len,p;
	char a[600]={0},b[600][10]={0};
	scanf("%d",&n);
	scanf("%s",a);
	len=strlen(a);
	for(i=0;i<len-n+1;i++)
	{
		for(j=0;j<n;j++)
		{
			b[i][j]=a[i+j];
		}
	}
	for(i=0;i<len-n;i++)
	{
		count[i]=1;
		for(j=i+1;j<len-n+1;j++)
		{
			t=strcmp(b[i],b[j]);
			if(t==0)
			{
				count[i]++;
			}
		}
	}
	max=1;
	for(i=0;i<len-n;i++)
	{
		if(count[i]>max)
		{
			max=count[i];
		}
	}
	if(max<=1)
	{
		printf("NO");
	}
	else
	{
	printf("%d\n",max);
	for(i=0;i<len-n+1;i++)
	{
		if(count[i]==max)
		{
    	printf("%s\n",b[i]);
		}
	}
	}
	return 0;
}
int main()
{
    int n, i, j, k = 0;
    cin >> n;
    char data[505], substr[505][n + 1];
    cin >> data;
    int len = strlen(data);
    for (i = 0; i <= len - n; i++) {
        for (j = 0; j < n; j++) {
            substr[k][j] = data[i + j];
        }
        substr[k][n] = '\0';
        k++;
    }

    int count[len - n + 1];
    for (i = 0; i <= len - n; i++) count[i] = 0;

    for (i = 0; i <= len - n; i++) {
        for (j = i; j <= len - n; j++) {
            if (strcmp(substr[i],substr[j]) == 0) count[i]++;
        }
    }

    int max = count[0];
    for (i = 0; i <= len - n; i++) {
        if (count[i] > max) max = count[i];
    }
    if (max == 1) {cout << "NO" << endl; return 0;}
    cout << max << endl;
    for (i = 0; i <= len - n; i++) {
        if (count[i] == max) cout << substr[i] << endl;
    }

    return 0;
}
main()
{
	int n,i,j,p,q,r,delta=1,max=1;//delta ??
	scanf("%d\n",&n);
	char a[500]={'\0'};
	int num[500]={0};//num????
	gets(a);
	int l=strlen(a);
	char b[500][5]={'\0'};//??????
	for (i=0;i<=l-n;i++)//l+1-n???
		for(j=0;j<n;j++)
			b[i][j]=a[i+j];
	for(p=0;p<l-n;p++)
	{
		if(num[p]>0) 
		{
			num[p]=0;continue;
		}
		else 
		{
			for(q=p+1;q<=l-n;q++)
		{
			if(strcmp(b[p],b[q])==0) 
			{
				num[p]++;num[q]++;delta++;
			}
		}
		if(delta>max) max=delta;
		delta=1;
		}
	}
	if(max==1) printf("NO");
	else
	{
		printf("%d\n",max);
		for(r=0;r<l-n;r++)
			if((num[r]+1)==max)
			printf("%s\n",b[r]);
	}
	return 0;
}
int main()
{
	int max=0;
	int n,m,len,i,j,k,count[500]={1};
	char s1[502];
	scanf("%d %s",&n,s1);
	len=strlen(s1);
	m=len-n+1;
	for(i=0;i<m,s1[i]!='\0';i++)
	{
		count[i]=1;
		for(j=i+1;j<m;j++)
		{
			k=0;
			while(k<n)
			{
			  if(s1[i+k]==s1[j+k]) k++;
			  else break;
			}
			if(k==n) count[i]++;
		}
	}
	for(i=0;i<m;i++)
	{
		if(max<=count[i]) max=count[i];
		else max=max;
	}
	if(max==1) printf("NO");
	else
	{
		printf("%d\n",max);
	for(i=0;i<m;i++)
	{
		if(count[i]==max)
		{
			for(k=0;k<n;k++)
			{
				printf("%c",s1[i+k]);
			}
		}
		printf("\n");
		
	}
	}
	return 0;
}
int maximum(int a,int b)
{
	if(a>b) return a;
	else return b;
}
main()
{
	int i,j,n,k,len,sta[500]={0},x=0,max=0,num;
	char input[500];
	scanf("%d",&n);
	scanf("%s",input);
	len=strlen(input);
	for(i=0;i<len;i++)
	{
		for(k=0;k<i;k++)
		{
			x=0;
			for(j=0;j<n;j++)
			{
				if(input[i+j]==input[k+j])
					x++;
				else break;
			}
			if(x==n)
			{
				sta[k]++;
				max=maximum(max,sta[k]);
				break;
			}
		}
	}
	if(max==0) printf("NO");
	else
	{
	printf("%d\n",max+1);
	for(i=0;i<500;i++)
		if(sta[i]==max)
		{
			for(j=0;j<n;j++)
				printf("%c",input[i+j]);
			printf("\n");
		}
	}

}
main()
{
  int n,sum[500],max=0;
  int i,k,j;
  char a[501];
  scanf("%d",&n);
  scanf("%s",a);
  for(i=0;i<=strlen(a)-n;i++)
  {sum[i]=1;
    for(j=i+1;j<=strlen(a)-n;j++)
    {
       for(k=0;k<n;k++)
        if(a[i+k]!=a[j+k])
        break;
       if(k==n)
        sum[i]++;
    }
    if(max<sum[i])
    max=sum[i];
}
if(max>1)
{ printf("%d\n",max);
for(i=0;i<=strlen(a)-n;i++)
{
   if(sum[i]==max)
   for(j=0;j<n;j++)
   printf("%c",a[i+j]);
   printf("\n");
}
}
else
printf("NO");     

}
int main(){
char zfc[520],chu[520][5];
int ps[520],n,m,max[520],s;
memset(zfc,'\0', sizeof(zfc));
memset(chu,'\0',sizeof (chu));
memset(ps,0,sizeof (ps));
memset(max,0,sizeof (max));
scanf("%d",&n);
scanf("%s",zfc);
for (int i=0;i<=strlen(zfc)+1-n;i++){
      m=0;
      for (int j=i;j<i+n;j++){
           chu[i][m]=zfc[j];
           m++;
       }
}
ps[0]=1;
for(int t=1;t<=strlen(zfc)+1-n;t++){
    ps[t]=1;
    for(int k=0;k<t;k++){
      if (ps[k]==0) continue;
      if(strcmp(chu[k],chu[t])==0){
               ps[k]++;
               ps[t]=0;
               break;
      }
    }
}
s=1;
for (int a=1;a<=strlen(zfc)+1-n;a++){
     if(ps[a]>ps[max[0]]){
          max[0]=a;
              for(int y=1;y<=s;y++){
                  max[y]=0;
              }
          s=1;
          continue;
     }
     if(ps[a]==ps[max[0]]){
          s++;
          max[s-1]=a;
     }
 }
if(ps[max[0]]<=1){
      printf("NO");
}
else {
      printf("%d\n",ps[max[0]]);
      for(int c=0;c<s;c++){
          printf("%s\n",chu[max[c]]);
      }
}
return 0;
}
int main(){
	int n;
	char s[505],temp[6];
	char an[505][6];
	int bn[505]={0};
	scanf("%d%s",&n,s);
	int len=strlen(s);
	int count=1,i,j;
	for(i=0;i<n;i++){
		an[0][i]=s[i];
	}
	an[0][n]='\0';
	bn[0]=1;
	for(i=1;i<=len-n;i++){
		for(j=i;j<i+n;j++)
			temp[j-i]=s[j];
		temp[n]='\0';
		int k=0;
		while(k<count&&strcmp(temp,an[k])!=0){
			k++;
		}
		if(k==count){
			strcpy(an[count],temp);
			bn[count]=1;
			count++;
		}
		else
			bn[k]++;
	}
	int max=1;
	for(i=0;i<count;i++){
		if(bn[i]>max)max=bn[i];
	}
	if(max==1){
		printf("NO");
	}
	else{
		printf("%d\n",max);
		for(i=0;i<count;i++){
			if(bn[i]==max){
				printf("%s\n",an[i]);
			}
		}
	}
	return 0;
}
int main()
{
	char words[501]={0};
	char cm[500][5]={{0}};
	int n=0;
	cin>>n;
	cin.get();
	cin.getline(words,500,'\n');
	int i=0,j=0,k=0;
	int len=strlen(words);
	for(i=0;i<=(len-n);i++) //?????????????????cm???????
	{
		k=i;
		while(j<n)
			cm[i][j++]=words[k++];
		cm[i][j]='\0';
		j=0;
	}
	int count[500]={0};
	for(i=0;i<=(len-n);i++)
	{
		for(j=i;j<=(len-n);j++)
		{
			int judge=0;
			for(k=0;k<n;k++)
			{
				if(cm[i][k]!=cm[j][k])
				{
					judge=1;
					break;
				}
			}
			if(judge==0)
				count[i]++;
		}
	}
	int max=count[0];
	for(i=0;i<=(len-n);i++)
	{
		if(max<count[i])
			max=count[i];
	}
	if(max==1)
		cout<<"NO"<<endl;
	else if(max>1)
	{
		cout<<max<<endl;
		for(i=0;i<=(len-n);i++)
			if(count[i]==max)
				cout<<cm[i]<<endl;
	}
	return 0;
}