semeru/Code-Code-CloneDetection-POJ104 huggingface dataset:
int main(int argc, char* argv[])
{
	int n,i,j,k,p,l,count=0;
	char record[500][6],a[500],temp[6];
	int num[500]={0};
	
	scanf("%d",&n);
	scanf("%s",a);
	l=strlen(a);
	for (i=0;i<=l-n;i++)
	{
		for (j=0;j<=n-1;j++)
		{
			temp[j]=a[i+j];
		}
		temp[j]='\0';
		int found=0;
		for (p=0;p<count;p++)
		{
			if (strcmp(record[p],temp)==0)
			{
				found=1;
				num[p]++;
				break;
			}
			
		}	
		
		if (found==0)
		{		
			
			for (j=0;j<=n;j++)
			{
				record[count][j]=temp[j];
				num[count]=1;
			}
			
			count++;
		}
	}
	
	int max=0;
	for (i=0;i<=count;i++)
	{
		if (num[i]>max)
		{
			max=num[i];
		}
	}
	if (max==1)
	{
		printf("NO");
	return 0;
	}
	
	printf("%d\n",max);
	
	for (i=0;i<=count;i++)
	{
		if (num[i]==max)
		{
			
			printf("%s\n",record[i]);
			
		}
		
	}
	
	return 0;
}
int count(char b[][6],char c[],int d[],int num)
{
  int k=0;
  while(k<num && strcmp(b[k],c)!=0)   {++k;}
  if(k<num)
  {
    d[k]++;
    return num;
  }
  else
    {
      strcpy(b[num],c);
      d[num]=1;
      return num+1;
      }
   }
void main()
{
  char a[301],b[301][6],c[6];
  int i,j,k,l,n,num,d[301],max;
  scanf("%d\n",&n);
 scanf("%s",a);
  l=strlen(a);
  num=0;
  for(i=0;i<=l-n;++i)
  {
    for(j=0;j<n;++j)
    {
      c[j]=a[i+j];
    }
    c[j]='\0';
    num=count(b,c,d,num);
  }
  max=d[0];
   for(i=0;i<num;i++)
   {
       if(d[i]>=max)    max=d[i];
   }
   if(max==1)   printf("NO");
   else
   {
   printf("%d\n",max);
   for(k=0;k<l-n;k++)
   {
       if(d[k]==max)    printf("%s\n",b[k]);
   }
   }
}
int main()
{
	int m,n,t,e,i,j,k,l,p,max=0,c[501]={0};
	char a[501],b[251][5]={0};
	scanf("%d",&n);
	scanf("%s",a);
	m=strlen(a);
	for(j=0;j<m-n+1;j++)
	{
		for(i=0;i<n;i++)
		{
			b[j][i]=a[j+i];
		}
	}
	for(k=0;k<m-n+1;k++)
	{
		for(l=k;l<m-n+1;l++)
		{
			if(strcmp(b[k],b[l])==0) c[k]=c[k]+1;
		}
		if(c[k]>max) max=c[k];
	}
	if(max==1) printf("NO");
	else
	{
		printf("%d\n",max);
		for(p=0;p<m-n+1;p++)
		{
			if(c[p]==max)
			{
				printf("%s\n",b[p]);
			}
		}
	}
	return 0;
}
int main() {

	int n;
	char s[1000];
	char str[500][500];
	char result[500][500];
	scanf("%d", &n);
	scanf("%s", s);
	int i, j, k;
	int len = strlen(s) - n + 1;
	for (i = 0; i < len; i++) {
		for (j = 0; j < n; j++) {
			str[i][j] = s[i + j];
		}
		str[i][j] = '\0';
	}
	for (i = 0; i < len; i++) {
		for (j = 0; j < len - 1; j++) {
			if (strcmp(str[j], str[j + 1]) > 0) {
				char temp[1000];
				strcpy(temp, str[j]);
				strcpy(str[j], str[j + 1]);
				strcpy(str[j + 1], temp);
			}
		}
	}
	int max = 1;
	int count = 1;
	for (i = 1; i < len; i++) {
		if (strcmp(str[i], str[i - 1]) == 0) {
			count++;
			if (count > max) {
				max = count;
			}
		} else {
			count = 1;
		}
	}
	if (max <= 1) {
		printf("NO\n");
		return 0;
	}
	printf("%d\n", max);
	int num = 0;
	count = 1;
	for (i = 1; i < len; i++) {
		if (strcmp(str[i], str[i - 1]) == 0) {
			count++;
			if (count == max) {
				strcpy(result[num], str[i]);
				num++;
			}
		} else {
			count = 1;
		}
	}

	for (i = 0; i < num; i++) {
		for (j = 0; j < num - 1; j++) {
			if (strstr(s, result[j]) > strstr(s, result[j + 1])) {
				char temp[1000];
				strcpy(temp, result[j]);
				strcpy(result[j], result[j + 1]);
				strcpy(result[j + 1], temp);
			}
		}
	}
for (i = 0; i < num; i++) {
		printf("%s\n", result[i]);
	}

	return 0;
}
int main()
{
	int n,i,j,k,b=0,c[500];
	char a[500];
	for(i=0;i<500;i++)
	{
		c[i]=1;
	}
    scanf("%d",&n);
	scanf("%s",a);
	int len=strlen(a);
	for(k=0;k<len-n+1;k++)
	{
		for(i=k+1;i<len-n+1;i++)
		{
			for(j=0;j<n;j++)
			{
				if(a[k+j]==a[i+j])
				{
					b++;
				}
			}
			if(b==n)
			{
				c[k]++;
			}
			b=0;
		}
			
	}
	int max=1;
	for(i=0;i<len;i++)
	{
		if(c[i]>max)
			max=c[i];
	}
	if(max==1)
	{
		printf("NO");
	}
	else
	{
		printf("%d\n",max);
		for(i=0;i<len-n+1;i++)
		{
			if(c[i]==max)
			{
				for(j=i;j<i+n;j++)
				{
					printf("%c",a[j]);
				}
				printf("\n");
			}
		}
	}
	return 0;
}
main(){
 int n,i,j,len;
 char str[501];
 char*p1;
 char*p2;
 char word[510][5];
 int num[510];
 
 scanf("%d%s",&n,str);
 p1=p2=str;
 len=strlen(str);
 for(i=0;i<len-n+1;i++){
	 p2=p1;
	 for(j=0;j<n;j++){
		 word[i][j]=*p2;
		 p2++;
	 }
	 p1++;
 }/*??????????*/
 for(i=0;i<len-n+1;i++){
	 num[i]=1;
	 word[i][n]='\0';
 }
 for(i=0;i<len-n;i++){
	 for(j=i+1;j<len-n+1;j++){
		 if(strcmp(word[i],word[j])==0) num[i]++;
	 }
 }
 int max=num[0];
 for(i=1;i<len-n+1;i++){
	 if(max<num[i]) max=num[i];
 }
 if(max<=1) printf("NO");
 else{
	printf("%d",max);
	for(i=0;i<len-n+1;i++){
	 if(num[i]==max) printf("\n%s",word[i]);
	 }
	}
}
//***********************************
//* &sup3;&Igrave;&ETH;ò&Atilde;&ucirc;&pound;&ordm;n-gram&acute;&reg;&AElig;&micro;&Iacute;&sup3;&frac14;&AElig;         ** 
//* ×÷&Otilde;&szlig;&pound;&ordm;&Agrave;&icirc;&Otilde;&aelig;&Ograve;&raquo; 1300012948        ** 
//* &Ecirc;±&frac14;&auml;&pound;&ordm;2013.12.13               ** 
//***********************************
int main()
{
     int count[500] = {0}, n, len, most = 1, j;
     char a[502], b[502][6], *p;
     cin >> n >> a;
     len = strlen(a);
     for(int i = 0; i <= len - n; i++)
     {
             for(j = 0, p = a + i; j < n; j++, p++)
             {
                     b[i][j] = *p;
             }
     }
     for(int i = 0; i <= len - n; i++)
     {
             for(int m = i; m <= len - n; m++)
             {
                     if(strcmp(b[i], b[m]) == 0)
                     {
                                      count[i]++;
                     }
             }
     }
     for(int i = 0; i <= len - n; i++)
     {
             most = most > count[i] ? most : count[i];
     }
     if(most == 1)
     {
             cout << "NO" << endl;
     }
     else
     {
         cout << most << endl;
         for(int i = 0; i <= len - n; i++)
         {
                 if(count[i] == most)
                 {
                             cout << b[i] << endl;
                 }
         }
     }
     return 0;
}
int main()
{
	int n,i,j,k,t,len,max;
	int m[600]={0};
	char s[600],w[600][5];
	int flag;
	char ss[5];
	
    scanf("%d\n",&n);
	gets(s);
	len=strlen(s);
	i=0;
	t=0;
	
	while(i<len-n+1)
	{
	    flag=-1;
		for(j=i;j<i+n;j++) 
          ss[j-i]=s[j];
		ss[n]=0;
		for(j=0;j<t;j++)
		   if(strcmp(w[j],ss)==0) 
		   {
		     flag=j;
			 break;
		   }
		if(flag!=-1) 
		{
		  m[flag]++;
		  i++;
		  continue;
		}
		strcpy(w[t],ss);
		t++;
		m[t-1]++;
		i++;
	}
	
	max=0;
	for(i=0;i<t;i++)
		if(m[i]>max) 
          max=m[i];
	if(max<=1)
      printf("NO");
	else
	{
		int flag=1;
		printf("%d\n",max);
		for(i=0;i<t;i++)
			if(m[i]==max)
			{
				if(flag==0)
                  printf("\n");
				printf("%s",w[i]);
				if(flag)
                  flag=0;
			}
	}
	return 0;

}
void main()
{
	int n;
	scanf("%d",&n);
	int length;
	char str[500];
	scanf("%s",str);
	char son[500][5];
	length=strlen(str);
	int i,j;
	for(i=0;i<length-n+1;i++)
	{
		for(j=0;j<n;j++)
		{
			son[i][j]=str[i+j];
		}
		son[i][n]='\0';
	}
	int numson=length-n+1;
	int number[500]={0};
	for(i=0;i<numson;i++)
	{
		if(!strcmp(son[0],son[i]))
			number[0]++;
	}
	for(i=1;i<numson;i++)
	{
		for(j=0;j<i;j++)
		{
			if(!strcmp(son[i],son[j]))
				continue;
		}
		for(j=i;j<numson;j++)
		{
			if(!strcmp(son[i],son[j]))
				number[i]++;
		}
	}
	int max=0;
	for(i=0;i<numson;i++)
	{
		if(number[i]>max)
			max=number[i];
	}
	if(max==1)
		printf("NO\n");
	else
	{
		printf("%d\n",max);
		for(i=0;i<numson;i++)
		{
			if(number[i]==max)
				printf("%s\n",son[i]);
		}
	}
}
void main()
{
	char a[505],b[505][6]={0};
	int n,i,j,t,c[505],max=1,y=1;
	scanf("%d",&n);
	scanf("%s",a);
	int l=strlen(a);
	for(i=0;i<=l-n;i++)
	{
		t=i;
		for(j=0;j<n;j++)
		{
		    b[i][j]=a[t];
			t++;
		}
	}
	for(i=0;i<l-n;i++)
	{
		c[i]=1;
		for(j=i+1;j<=l-n;j++)
		{
			if(strcmp(b[i],b[j])==0) c[i]++;
		}
		if(c[i]>=max) 
		{
			max=c[i];
		}
	}
	if(max==1) printf("NO");
	else
	{
	printf("%d\n",max);
	for(i=0;i<=l-n;i++)
	{
		
		if(c[i]==max) printf("%s\n",b[i]);
	}
	}
}
int main()
{
	int len,max,n,p;
	int i1,i2,i3,i4,i5,i6,i7;
	int a[510][5],num[510];
	char str[510];
	scanf("%d",&n);
	scanf("%s",str);
	len=strlen(str);
	memset(num,0,sizeof(num));
	memset(a,0,sizeof(a));
	for(i1=0;i1<=len-n;i1++)
	{
		for(i2=0;i2<=n-1;i2++)
		{
			a[i1][i2]=str[i1+i2];
		}
	}
	for(i3=0;i3<=len-n;i3++)
	{
		for(i4=i3+1;i4<=len-n;i4++)
		{
			if((a[i3][0]==a[i4][0])&&(a[i3][1]==a[i4][1])&&(a[i3][2]==a[i4][2])&&(a[i3][3]==a[i4][3])&&(a[i3][4]==a[i4][4]))
			num[i3]++;	
		}
	}
	max=num[0];
	for(i5=1;i5<=len-n;i5++)
	{
		if(num[i5]>max)
		  max=num[i5];
	}
	if(max==0)
		printf("NO");
	else
	  {p=max+1;
printf("%d\n",p);
		for(i6=0;i6<=len-n;i6++)
	    {
		 if(num[i6]==max)
		 {
			 for(i7=0;i7<=n-1;i7++)
			 {
				 if(i7==n-1)
					 printf("%c\n",str[i6+i7]);
				 else
				     printf("%c",str[i6+i7]);
			 }
         }	
	    }
	  }
	
}
main()
{
	char c[501]={'\0'},ch[501][6]={{'\0'}};
	int a[500]={0},i,j,n,len,max;
	scanf("%d",&n);
	getchar();
	gets(c);
	len=strlen(c);
	for(i=0;i<len+1-n;i++)
	{
		for(j=0;j<n;j++)
		{
			ch[i][j]=c[i+j];
		}
	}
	for(i=0;i<len+1-n;i++)
	{
		if(ch[i][0]=='\0')
			continue;
		for(j=0;j<len+1-n;j++)
		{
			if(j==i)
				continue;
			else
			{
				if(!strcmp(ch[i],ch[j]))
				{
					a[i]++;
					ch[j][0]='\0';
				}
			}
		}
	}
	max=a[0];
	for(i=1;i<len+1-n;i++)
	{
		if(a[i]>max)
			max=a[i];
	}
	if(max!=0)
	{
		printf("%d\n",max+1);
    	for(i=0;i<len+1-n;i++)
		{
	    	if(a[i]==max)
	     		puts(ch[i]);
		}
	}
	else
		printf("NO\n");
	return 0;
}
char str[1000],s[1000][1000];
int num[1000]={0};
void main()
{
	int n,i,j;
	scanf("%d",&n);
	scanf("%s",str);
	int len=strlen(str);
	int q=0;
	for(i=0;i<len;i++)
	{
		if(len-i<n)
			break;
		int boo=0;
		int p=0,m;
		for(j=i;j<i+n;j++)
		{
			s[q][p++]=str[j];
		}
		s[q][p]='\0';
		for(m=0;m<q;m++)
		{
			if(strcmp(s[m],s[q])==0)
			{
				
				boo=1;break;
			}
		}
		if(boo==1)
			continue;
		char *ptr;
		ptr=strstr(str,s[q]);
		if(!ptr)
			continue;
		else
			while(ptr)
			{
				ptr+=1;
				ptr=strstr(ptr,s[q]);
				num[q]++;
			}
		q++;
	}
	
	int max=0;
	for(i=0;i<len+2;i++)
	{
		if(num[i]>max)
			max=num[i];
	}
	if(max>1)
	{
		printf("%d\n",max);
		for(i=0;i<len+2;i++)
		{
			if(num[i]==max)
				printf("%s\n",s[i]);
		}
	}
	else
		printf("NO\n");
}
main()
{
	int max(int m[500]);
	int i=0,j=0,k=0,n,p,x;
	char c[500]={'\0'};
	int m[500]={0};
	char a[5]={'\0'};
	scanf("%d\n",&n);
	scanf("%s",c);
	for(i=1;i<(L-n+1);i++)
	{
		for(j=0;j<i;j++)
		{p=0;
			for(k=0;k<n;k++)
				if(c[i+k]==c[j+k])p++;
			if(p==n)m[j]++;
		}
	}
	x=max(m)+1;
	if(x>1)
	{
	printf("%d\n",x);
	for(i=0;i<L;i++)
	{
		if(m[i]==max(m))
		{
			for(k=0;k<n;k++)a[k]=c[i+k];
			printf("%s\n",a);
		}
	}
	}
	else printf("NO\n");
	return 0;
}
int max(int m[500])
{
	int i,x=0;
	for (i=0;i<500;i++)
		if(m[i]>m[x])x=i;
	return (m[x]);
}
int main(){
	int n,a[500],i,j,k,t,max;
	char s[500];
	scanf("%d\n",&n);
	gets(s);
	for(i=0;i<strlen(s);i++){
		a[i]=1;
		for(j=i+1;j<strlen(s);j++){
			t=1;
			for(k=0;k<n;k++)
				if(s[i+k]!=s[j+k])
					t=0;
			if(t==1)
				a[i]++;
		}
	}
	t=0;
	for(i=0;i<strlen(s);i++)
		if(a[i]>1){
			t=1;
			break;
		}
	if(t==0)
		printf("NO");
	else{
		max=2;
		for(i=0;i<strlen(s);i++)
			if(a[i]>max)
				max=a[i];
		printf("%d\n",max);
		for(i=0;i<strlen(s);i++)
			if(a[i]==max){
				for(j=i;j<i+n;j++)
					printf("%c",s[j]);
				printf("\n");
			}
	}
	return 0;
}
int main()
{
	char a[510],b[510][6];
	int c[510]={0},i,j,s,n,l,m=0;
	scanf("%d\n",&n);
	gets(a);l=strlen(a);
	for(i=0;i<=l-n;i++)
	{for(j=0;j<n;j++)
			b[i][j]=a[i+j];
	b[i][j]=0;}
    for(i=0;i<=l-n;i++)
	{s=1;for(j=0;j<i;j++)
	if(c[j]!=-1)if(strcmp(b[i],b[j])==0){c[j]+=1;c[i]=-1;s=0;break;}
	if(s)c[i]+=1;}
    for(i=0;i<=l-n;i++)
		if(c[i]>m)m=c[i];
	if(m>1){printf("%d\n",m);for(i=0;i<=l-n;i++)
		if(c[i]==m)puts(b[i]);}
	else printf("NO");

    
}
int main()
{
	int a[500]={0},m,n,i,l,q,max=0;
	char s[501],b[500][5]={0};
	scanf("%d\n",&n);
	gets(s);
	l=strlen(s);
	for(m=0;m<l-1;m++)
	for(i=0;i<n;i++)
	b[m][i]=s[m+i];
	for(m=0;m<l-1;m++)
	{
		a[m]=1;
	    for(q=m+1;q<l-1;q++)
	    {
		   if(strcmp(b[m],b[q])==0)  
		   {
			  a[m]=a[m]+1;
		   }
	    }
	    if(a[m]>max) max=a[m];
    }
    if(max==1) printf("NO");
    if(max!=1) printf("%d\n",max);
    for(m=0;m<l-2;m++)
    {
    	if(a[m]==max&&max!=1) 
		 printf("%s\n",b[m]);
    }
    
}
int main()
{
    int n,m,i,j,t,k,num[510]={0},max,sum=0;
    char str[510],a[510][6];
    scanf("%d%s",&n,str);
    m=strlen(str);
    for(i=0;i<=(m-n);i++)
   { for(j=0;j<n;j++)
       a[i][j]=str[i+j];
     for(k=0;k<=(m-n);k++)
     {
        t=strcmp(a[i],a[k]);
        if(t==0)
        {
          num[k]=num[k]+1;
          break;
        }
    
     } 
   }
    max=num[0];
    for(i=0;i<=(m-n);i++)
    {
       if(num[i]>max)  max=num[i];
    }
    if(max==1) printf("NO");
    else 
    {
       
       printf("%d\n",max);
       for(i=0;i<=(m-n);i++)
       {
           if(num[i]==max)
           printf("%s\n",a[i]);
       }
    }  
   

     return 0;
    
    
}
void main()
{
	int f(char s[],int n,int len,int i);
	int n,len=0,i=0,j=0,t=0,x=0;
	char s[500],p[500];
	scanf("%d",&n);
	scanf("%s",s);
	len=strlen(s);
	for(i=0;i<len-n+1;i++)
	{
		p[i]=f(s,n,len,i);
	}
	for(i=0,t=p[0];i<len-n+1;i++)
	{
		if(t<p[i])t=p[i];
	}
	if(t==0)printf("NO");
	else
	{
    	printf("%d\n",t+1);
    	for(i=0;i<len-n+1;i++)
		{
	    	if(p[i]==t)
			{
			 for(j=i;j<i+n;j++)
				printf("%c",s[j]);
			 printf("\n");
			}
		}
	}
}

int f(char s[],int n,int len,int i)
{
	int j,cou=0,k,q;
	for(j=i+1;j<len-n+1;j++)
	{
		if(s[j]==s[i])
		{
			for(k=i,q=j;k<i+n;k++)
				if(s[k]==s[q])q++;
			if(q>=j+n)cou++;
		}
	}
	return(cou);
}
int main()
{
	char o[501],p[501][501],q[501][501];
	int i,j,k;
	int s=1;
	int m=-1,n;
	int a[501],b[501];

	for(i=0;i<=500;i++)
	{
		a[i]=1;
	}
	for(i=0;i<=500;i++)
	{
		for(j=0;j<=500;j++)
		{
			p[i][j]='\0';
			q[i][j]='\0';
		}
	}
	scanf("%d",&n);
	getchar();
	gets(o);
	for(i=0;i<strlen(o)-n+1;i++)
	{
		k=0;
		for(j=i;j<=i+n-1;j++)
		{
			p[i][k]=o[j];
			k++;
		}
	}
	for(j=0;j<strlen(o)-n+1;j++)
	{
		for(i=0;i<strlen(o)-n+1;i++)
		{
			if(strcmp(p[j],q[i])==0)
			{
				a[i]++;
				break;
			}
			else if(q[i][0]=='\0')
			{
				strcpy(q[i],p[j]);
				break;
			}
		}
	}
	j=0;
    for(i=0;i<strlen(o);i++)
	{
		if(a[i]>s)
		{
			s=a[i];
		}
	}
	for(i=0;i<strlen(o);i++)
	{
		if(a[i]==s)
		{
			b[j]=i;
			j++;
		}
	}
    if(s==1)
	{
		printf("NO");
	}
	else
	{
		printf("%d\n",s);
		for(i=0;i<j;i++)
		{
			for(k=0;k<n;k++)
			{
				printf("%c",q[b[i]][k]);
			}
			printf("\n");
		}
	}
	return 0;
}
void main()
{
	char a[502],b[500][6];
	int i,j,l,m,n,k=0,c[500]={0},max=1,f=0;
	scanf("%d",&n);
	scanf("%s",a);
	l=strlen(a);
	m=l-n+1;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
			b[i][j]=a[i+j];
		b[i][j]='\0';
	}
	for(i=0;i<m;i++)
	{
		for(j=0;j<m;j++)
		{
			for(k=0;k<n;k++)
				if(a[j+k]!=b[i][k]) break;
			if(k==n) c[i]++;
		}
	}
	for(i=0;i<m;i++)
		for(j=0;j<m;j++)
		{
			if(j==i) continue;
			if(strcmp(b[i],b[j])==0) {b[j][0]='\0';c[j]=0;}
		}
	for(i=0;i<m;i++)
	{
		if(c[i]>=max) max=c[i];
	}
	if(max==1) printf("NO");
	else
	{printf("%d\n",max);
	for(i=0;i<m;i++)
		if(c[i]==max)
			printf("%s\n",b[i]);}
}
int main ( )
{
	char a[501] ;            //???????????
	char *p ;                //???????
	p = a ;
	int i,j,k ;
	int n ;
	int sum = 0 ;            //????
	cin >> n ;
	cin.get( ) ;             //??????
	i = 0 ;
	while(1)
	{
		*(p+i) = cin.get( ) ;
		if( *(p+i) == '\n' )
			break ;
		i++ ;
	}                         //??????????????
	cout << endl ;
	sum = i ;
	char f[501][5] ;          //???????n?????????
	char (*q)[5] ;            //???????
	q = f ;
	int g[501] = {0} ;        //????????????
	for( i = 0 ; i <= sum - n ; i++ ) 
	{
		for( j = i ,k = 0 ; j <= n - 1 + i ,k <= n - 1 ; j++ ,k++ )
		{
			*(*(q+i)+k) = *(p+j) ;	
		}
	}                         //????n???????????????
	int flag[501] = {0} ;
	k = 0 ;
	int t ;
	for( i = 0 ; i <= sum - n ; i++ )
	{
		if( flag[i] == 1 )
		{
			k-- ;
			continue ;
		}                      //??????1?????????k???1???
		for( j = i ; j <= sum - n ; j++ )
		{
			for( t = 0 ; t <= n - 1 ; t++ )
			{
			   if( *(*(q+i)+t) != *(*(q+j)+t) )
			   {
			       break ;      //?????????????????
			   }         
			}
			if( t == n )        //???????
			{
				g[i]++ ;        //???1
				flag[j] = 1 ;   //????????1
			}
		}
		k++ ;                   //???????
	}
	int l = 0 ;
	for( i = 0 ; i <= sum - n ; i++ )
	{
		l = max(g[i],l) ;       //?????????
	}
	if( l >= 2 )                //??????1?
	{
		cout << l << endl ;     //???????  
		for( i = 0 ; i <= sum - n ; i++ )
		{
			if( g[i] == l )
			{
				for( t = 0 ; t <= n - 1 ; t++ )
				{
					cout << *(*(q+i)+t) ;
				}
				cout << endl ;
			}
		}                       //???????????????
	}
	else
		cout << "NO" << endl ;  //?????1?????NO
	return 0 ;
}
int main()
{
	char s[500],w[500][5]={0};int n,i,j,l,max=-1,no[500]={0};
	scanf("%d\n",&n);
	gets(s);l=strlen(s);
	for(i=0;i<l-n+1;i++)
		for(j=0;j<n;j++)
		w[i][j]=s[i+j];
	for(i=0;i<l-n;i++)
		for(j=i+1;j<l-n+1;j++)
			if(strcmp(w[i],w[j])==0) {no[i]++;if(no[i]>max) max=no[i];}
			if(max==-1) printf("NO");else{printf("%d\n",max+1);	
			for(i=0;i<l-n+1;i++) if(no[i]==max) printf("%s\n",w[i]);}
	return 0;
}
int main()
{
	char a[501];
	int n, i, j, e, t = 0, s, g, m = 0;
	char b[500][6], *p;
	char c[6];
	int d[500], *q;
	cin >> n;
	cin >> a;
	e = strlen(a);
	for(i = 0; i <= e - n; i ++)
	{
		s = 0;
		g = 0;
		for(j = i; j <= i + n - 1; j ++)
		{
			c[s] = a[j];
			s ++;
		}
		c[n] = 0;
		for(j = 0; j <= t - 1; j ++)
		{
			if(strcmp(b[j], c) == 0)
			{
				d[j] = d[j] + 1;
				g = 1;
				break;
			}
		}
		if(g == 0)
		{
			strcpy(b[t], c);
			d[t] = 1;
			t ++;
		}
	}
	q = d;
	for(i = 0; i <= t - 1; i ++)
	{
		if(*q > m)
			m = *q;
		q ++;
	}
	if(m > 1)
	{
		q = d;
		cout << m <<endl;
		for(i = 0; i <= t - 1; i ++)
		{
			if(m == *q)
			{
				p = *(b + i);
				cout << p << endl;
			}
			q ++;
		}
	}
	else
		cout << "NO";
	return 0;
}
void main()
{
	int n,i,l,j,ans[501]={0};
	char data[501]={0},use[501][5];
	scanf("%d",&n);
	scanf("%s",data);
	l=strlen(data);
	for(i=0;i<l-n+1;i++)
	{
		for(j=0;j<n;j++)
			use[i][j]=data[i+j];
		use[i][n]=0;
	}
	for(i=0;i<l-n+1;i++)
	{
		for(j=i+1;j<l-n+1;j++)
		{
			if(strcmp(use[i],use[j])==0&&use[i][0]!=0)
			{
				ans[i]++;
				use[j][0]=0;
			}
		}
	}
	int m=ans[0];
	for(i=0;i<l-n+1;i++)
	{
		if(ans[i]>m)
			m=ans[i];
	}
	if(m==0)
		printf("NO");
	else
	{
		printf("%d\n",m+1);
		for(i=0;i<l-n+1;i++)
		{
			if(ans[i]==m)
				printf("%s\n",use[i]);
		}
	}
}
int main()
{
	char z[500],gram[500][6];
	int n,i,j,js[500],len,max=1;
	scanf("%d%s",&n,z);
	len=strlen(z);
	for(i=0;i<len-n+1;i++)
	{
		for(j=0;j<n;j++)
		{
			gram[i][j]=z[i+j];
		}
		for(j=n;j<6;j++)
		{
			gram[i][j]=0;
		}
	}
	for(i=0;i<len-n+1;i++)
	{
		js[i]=0;
	}
	for(i=0;i<len-n;i++)
	{
		for(j=i;j<len-n+1;j++)
		{
			if(strcmp(gram[i],gram[j])==0)
			{
				js[i]++;
			}
		}
		if(js[i]>max)
		{
			max=js[i];
		}
	}
	if(max==1)
	{
		printf("NO");
	}
	else
	{
		printf("%d\n",max);
		for(i=0;i<len-n+1;i++)
		{

			if(js[i]==max)
			{
				for(j=0;j<n;j++)
				{
					printf("%c",gram[i][j]);
				}
				printf("\n");
			}
		}
	}
	return 0;
}
main()
{
      int n,i,j,k,e,m,x,y,z;
      char a[10000]={0},b[10000][100]={0},ch;
      int c[10000]={0};
      scanf ("%d",&n);
      scanf ("%s",a);
      for (i=0;a[i]!='\0';i++)
      {
          for (j=0;j<=n-1;j++)
          {
              if (a[i+n-1]!='\0')
              b[i][j]=a[i+j];
          }
      }
      for (i=0;a[i+n-1]!='\0';i++)
      {
          for (j=0;a[j+n-1]!='\0';j++)
          {
              e=0;
              for (k=0;k<=n-1;k++)
              {
                  if (b[i][k]==b[j][k]) e=e+1;
              }
              if (e==n) c[i]=c[i]+1;
          }
      }
      for (i=0;a[i+n-1]!='\0';i++)
      {
          for (j=i+1;a[j+n-2]!='\0';j++)
          {
              if (c[i]<c[j])
              {
                   x=c[j];
                   c[j]=c[i];
                   c[i]=x;
                   for (k=0;k<=n-1;k++)
                   {
                       ch=b[j][k];
                       b[j][k]=b[i][k];
                       b[i][k]=ch;
                   }
              }
          }
      }
      if (c[0]==1)
      printf ("NO");
      else
      {printf ("%d\n",c[0]);
       printf ("%s\n",b[0]);
       for (i=1;;i++)
       {
          z=0;
          if (c[i]==c[0])
          {
               for (j=i-1;j>=0;j--)
               { 
                   for(y=0,k=0;k<=n-1;k++)
                   {
                      if (b[i][k]==b[j][k])
                      y=y+1;  
                   }   
                   if (y==n)
                   z=1;
               }
               if (z==0) printf ("%s\n",b[i]);
          }
          else break;
       }
      }
}
int main()
{
  int n;
  char a[500];
  scanf("%d\n",&n);
  gets(a);
  int chang=strlen(a);
  int i,j,k;
  int num[500];
  for (i=0;i<chang;i++)
  {num[i]=1;}
  if (n==2)
  {
  for (i=0;i<chang-n+1;i++)
  {
      for (j=i+1;j<chang-n+2;j++)
      {
          if (a[j]==a[i])
          {
                if (a[j+1]==a[i+1])
                    num[i]=num[i]+1;         
          }
      }  
  }
      int max=0;
      for (j=0;j<chang-n+1;j++)
      {
          if (num[j]>max)
            max=num[j];
            else 
            ;
      }
      
      if (max==1)
      printf("NO");
      else
      {
          printf("%d\n",max);
          for (i=0;i<chang-n+1;i++)
       {
          if (num[i]==max)
          printf("%c%c\n",a[i],a[i+1]);
       }
      }
  }
  else if (n==3)
  {
       for (i=0;i<chang-n+1;i++)
  {
      for (j=i+1;j<chang-n+2;j++)
      {
          if (a[j]==a[i])
          {
                if (a[j+1]==a[i+1])
                {   
                    if(a[j+2]==a[i+2]) 
                    num[i]=num[i]+1; 
                }        
          }
      }  
  }
      int max=0;
      for (j=0;j<chang-n+1;j++)
      {
          if (num[j]>max)
            max=num[j];
            else 
            ;
      }
      
      if (max==1)
      printf("NO");
      else
      {
          printf("%d\n",max);
          for (i=0;i<chang-n+1;i++)
       {
          if (num[i]==max)
          printf("%c%c%c\n",a[i],a[i+1],a[i+2]);
       }
      }
  }
  else if (n==4)
  {
       for (i=0;i<chang-n+1;i++)
  {
      for (j=i+1;j<chang-n+2;j++)
      {
          if (a[j]==a[i])
          {
                if (a[j+1]==a[i+1])
                {   
                    if(a[j+2]==a[i+2]) 
                    {  
                      if (a[j+3]==a[i+3])
                      num[i]=num[i]+1; 
                    }
                }        
          }
      }  
  }
      int max=0;
      for (j=0;j<chang-n+1;j++)
      {
          if (num[j]>max)
            max=num[j];
            else 
            ;
      }
      
      if (max==1)
      printf("NO");
      else
      {
          printf("%d\n",max);
          for (i=0;i<chang-n+1;i++)
       {
          if (num[i]==max)
          printf("%c%c%c%c\n",a[i],a[i+1],a[i+2],a[i+3]);
       }
      }
  }
  

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