semeru/Code-Code-CloneDetection-POJ104 huggingface dataset:
int main()
{
	int n,i,j,k=0,flag,len,start,end,max=0,num[501]={0};
	char str[501],t[501][5]={0},temp[5];
	scanf("%d\n",&n);
	gets(str);
	len=strlen(str);
	for(start=0;start<=len-n;start++)
	{
		for(i=0;i<5;i++)
			temp[i]='\0';
		flag=0;
		end=start+n-1;
		j=0;
		for(i=start;i<=end;i++)
		{
			temp[j]=str[i];
			j++;
		}
		for(i=0;i<=k;i++)
		{
			if(strcmp(temp,t[i])==0)
			{
				num[i]++;
				flag=1;
				break;
			}
			else
				continue;
		}
		if(flag==0)
		{
			strcpy(t[k],temp);
			num[k]++;
			k++;
		}
	}
	for(i=0;i<k;i++)
	{
		if(num[i]>max)
			max=num[i];
	}
	if(max==1)
	{
		printf("NO");
		return 0;
	}
	printf("%d\n",max);
	for(i=0;i<k;i++)
	{
	//	printf("%d",num[i]);
	if(num[i]==max)
			puts(t[i]);
	}
	return 0;
}
int main()
{
	int n,i,len,j=0,k=0,l=0,c[505]={0},sum=0,max=2;
	char zichuan[505],a[505][505];
	scanf("%d\n",&n);
    gets(zichuan);
	len=strlen(zichuan);
	for(i=0;i<len;i++)
	{
		for(j=i;j<n+i;j++)
		{
	       a[k][l]=zichuan[j];
		   l++;
		}
		a[k][n]='\0';
		k++;l=0;
	}
    for(i=0;i<k;i++)
	{
         for(j=i;j<k;j++)
		 {
			
			if(strcmp(a[i],a[j])==0)
			{
				c[i]=c[i]+1;
			}
			 
		 }
		 
	}
     for(i=0;i<k;i++)
	 {
		
		 if(c[i]==1)
		 {
			 sum++;
		 }
	 }
	if(sum==k)
	{
		printf("NO");
	}
	else
	{
        for(i=0;i<k;i++)
		{
			if(max<=c[i])
			{
				max=c[i];
			}
			else
			{
				continue;
			}
		}
		printf("%d\n",max);
		for(i=0;i<k;i++)
		{ 
			    if(c[i]==max)
				{
					for(j=0;j<n;j++)
				{
					printf("%c",a[i][j]);
				}
					printf("\n");
				}
		
		}
	}

	return 0;
}
struct d
    {
        char a[5];
        int t;
    }str[500];
int compare(struct d *m,struct d *n)
{
    return n->t-m->t;
}

int main()
{
    int k,i,r=0,l,j,p,q;
    char s[501];

    int u[500]={0};
    scanf("%d",&k);
    scanf("%s",s);
    l=strlen(s);
    for(i=0;i<l;i++)
    {
        if(u[i]==0)
        {
            for(j=0;j<k;j++) str[r].a[j]=s[i+j];
            str[r].a[k]='\0';
            str[r].t=999-i;
            u[i]=1;
            j=i+1;
            while(j<l+1-k)
            {
                q=0;
                for(p=0;p<k;p++)
                {
                    if(s[j+p]!=str[r].a[p])
                    {
                        q=1;
                        break;
                    }
                }
                if(q==0)
                {
                    u[j]=1;
                    str[r].t=str[r].t+500;
                }
                j++;
            }
            r++;
        }
    }
    qsort(str,r,sizeof(struct d),compare);
    if((str[0].t)/500==1) printf("NO");
    else {
    printf("%d\n",(str[0].t)/500);
    for(i=0;(str[i].t)/500==(str[0].t)/500;i++)
    puts(str[i].a);
    }
    return 0;
}
int main()
{
	char a[500],b[500][6],c[6];
	int m[500]={0},n,i,j,k,e=0,f;
	scanf("%d",&n);
	scanf("%s",a);
	for(i=0;i<=strlen(a)-n;i++)
	{
		for(j=0;j<n;j++)
		{
			b[i][j]=a[i+j];
		}
		b[i][j]='\0';
	}
	for(i=0;i<=strlen(a)-n;i++)
	{
		for(j=0;j<i;j++)
		{
			if(strcmp(b[j],b[i])==0)
				break;
		}
		if(j==i)
		{
		for(k=i+1;k<=strlen(a)-n;k++)
		{
			if(strcmp(b[k],b[i])==0)
			{
				m[i]+=1;
			}
		}
	    }
	}
	for(i=0;i<=strlen(a)-n;i++)
	{
		if(e<m[i])
		{
			e=m[i];
		}
	}
	if(e==0)
	{
		printf("NO");
	}
	else{
	printf("%d\n",e+1);
	for(i=0;i<=strlen(a)-n;i++)
	{
		if(e==m[i])
		{
			printf("%s\n",b[i]);
		}
	}}
	return 0;
}
int main()
{
	int n,e=0,c[550]={0},k,max=1,i,j;
	char a[550]={'\0'},b[8]={'\0'},d[8]={'\0'};
	scanf("%d",&n);
	scanf("%s",a);
	for(i=0;i<=strlen(a)-n;i++){
		for(j=i;j<i+n;j++){
			b[e]=a[j];e++;
		}
		e=0;
		for(j=i;j<=strlen(a)-n;j++){
			for(k=j;k<j+n;k++){
				d[e]=a[k];e++;									
			}	e=0;
			if(strcmp(b,d)==0)
				c[i]++;		
	}}
	for(i=0;i<=strlen(a)-n;i++){
		if(c[i]>max)
			max=c[i];
	}
	if(max>1)
		printf("%d\n",max);
	else {
		printf("NO\n");
		return 0;
	}
	for(i=0;i<=strlen(a)-n;i++){
		if(c[i]==max){
			for(j=i;j<i+n;j++){
				printf("%c",a[j]);
			}
			printf("\n");
		}
	}
	return 0;
}
//***************************
//**???3.cpp
//**??????
//**???2013.12.11
//**?????n-gram????
//***************************

void exp(int a); // ???????????
void pick(); // ?????????????
int n;
char str[501];
int sumstr[499] = {0}; // ????????
int len;
int maximum = INT_MIN;

int main()
{
	cin >> n;
	cin.get(); // ????
	cin.getline(str, 501);
	len = strlen(str);
	exp(0); // ??????????
	if (maximum <= 1) // ???????????NO
		cout << "NO" << endl;
	else
		pick(); // ??????????????
	return 0;
}
void exp(int a)
{
	if (a == len - n + 1) // ????
		return;

	int flag; // flag???????

	for (int i = a; i <= len - n; i++) // ?????????
	{
		flag = 0;
		for (int j = 0; j <= n - 1; j++)
		{
			if (*(str + i + j) == *(str + a + j))
				flag++;
			else
				break;
		}
		if (flag == n) // n?????????????1
			(*(sumstr + a))++;
	}
	maximum = *(sumstr + a) > maximum? *(sumstr + a): maximum; // ?????
	exp(a + 1); // ????????????
}
void pick()
{
	cout << maximum << endl;
	for (int i = 0; i <= len - n; i++)
		if (*(sumstr + i) == maximum) // ?????????????
		{
			for (int j = 0; j <= n - 1; j++)
				cout << *(str + i + j);
			cout << endl;
		}
}
int main()
{
	char c[2000]={0},tc[2000][20]={0};
	int n,i,j,count[2000]={1},max=0;
	scanf("%d",&n);
	scanf("%s",c);
	for(i=0;c[i+n-1]!=0;i++)
	{
		for(j=0;j<n;j++)
		{
			tc[i][j]=c[i+j];
		}
	}
	for(i=1;tc[i][0]!=0;i++)
	{
		for(j=0;j<i;j++)
		{
			if(!strcmp(tc[i],tc[j])) {count[j]++;break;}
			if(j==i-1) count[i]++;
		}
	}
	for(i=0;tc[i][0]!=0;i++)
	{
		if(count[i]>max)
		{
			max=count[i];
		}
	}
	if(max==1) printf("NO\n");
	else
	{
		printf("%d\n",max);
		for(i=0;tc[i][0]!=0;i++)
		{
			if(count[i]==max)
			{
				printf("%s\n",tc[i]);
			}
		}
	}	
	return 0;
}
void main()
{
	char str[MAX];
	int n,len,i,j=0,k,flag,max;
	struct subs{
		char s[5];
		int num;
	}sub[MAX];

	scanf("%d",&n);
	getchar();
	gets(str);
	len=strlen(str);

	for(i=0;i<=len-n;i++){
		sub[i].num=0;
		if(i==0){
			strncpy(sub[j].s,str+i,n);
			sub[j].s[n]='\0';
			sub[j].num++;
			j++;
		}
		else{
			flag=1;
			for(k=0;k<j;k++){
				if( strncmp(sub[k].s,str+i,n)==0 ){
					sub[k].num++;
					flag=0;
					break;
				}
			}

			if(flag){
				strncpy(sub[j].s,str+i,n);
				sub[j].s[n]='\0';
				sub[j].num++;
				j++;
			}
		}
	}

	for(i=0;i<j;i++){
		if(i==0)
			max=sub[i].num;
		else if( sub[i].num>max )
			max=sub[i].num;
	}

	if(max==1)
		printf("NO\n");
	else{
		printf("%d\n",max);
		for(i=0;i<j;i++)
			if(sub[i].num==max)
				puts(sub[i].s);
	}
}
int main()
{
	char c[501];
	int a[500][500]={0};
	int n,v=1,s=1,ss,smax=1;
	int i,j,k;

	scanf("%d",&n);
	scanf("%s",c);

	for(i=0;c[i+n-1]!=0;i++)
	{
		ss=1;
		for(j=i+1;c[j+n-1]!=0;j++)
		{
			
			for(k=0;k<n;k++)
			{
				if(c[i+k]!=c[j+k])
				{
					s=0;
					break;
				}
				else
				{
					s=1;
				}
			}
			if(s)
			{
				ss++;
				if(ss>smax)
					smax=ss;
			}
		}
		if(ss>1)
		{
			a[i][ss]=1;
		}
	}
	if(smax>1)
	{
		printf("%d\n",smax);
		for(i=0;i<500;i++)
		{
			if(a[i][smax]==1)
			{
				for(j=0;j<n;j++)
				{
					printf("%c",c[i+j]);
				}
				printf("\n");
			}
			
		}
	}
	else
		printf("NO");
	return 0;
}
main()
{    char string[502],str[502][6];
     int a[502],x,u,n,v,max,t,p;
     scanf("%d",&n);
     scanf("%s",&string);
     x=strlen(string);
      for(u=0;u<x-n+1;u++)
      {
        for (v=0;v<n;v++)
          str[u][v]=string[u+v];
      }
      for(u=0;u<x-n+1;u++)
         a[u]=0; 
      for(u=0;u<x-n+1;u++)
        {for(v=0;v<x-n+1;v++)
         {if(strcmp(str[u],str[v])==0)
          a[u]++;
         }
        }
      max=a[0];t=0;
      for(u=0;u<x-n+1;u++)
        {if(a[u]>max)
           {max=a[u];
            t=u;}
        }
      
      if(max>1)
      { printf("%d\n",max);
        p=1;
        if(a[0]==max&&p==1)
        printf("%s\n",&str[0]);
        for(u=1;u<x-n+1;u++)
        {p=0;
         for(v=u-1;v>=0;v--)
         {if(strcmp(str[u],str[v])!=0)
            p=1;
          else
           {p=0;
            break;
           }
          }
         if(a[u]==max&&p==1)
         printf("%s\n",&str[u]);
        }
      }
      if(max==1)
      printf("NO\n");
}
main()
{
      char in[501];//?????? 
      char zi[501][5];//????? 
      int point[501];//??????????????? 
      for (int i=0;i<501;i++)point[i]=-1;
      int n,len;
      
      scanf("%d%s",&n,in);
      len=strlen(in);
      
for (int i=0;i<=len-n;i++)
{
          for (int j=0;j<n;j++)zi[i][j]=in[i+j];//????????
          zi[i][n]='\0'; 
}
 

for (int i=0;i<len-n;i++)
for (int j=i+1;j<len-n+1;j++)
{
    if ((strcmp(zi[i],zi[j])==0)&&point[i]==-1)//???????????-1????????????? 
    {
               point[j]=i;  //di yi ci chuxian              
    }
     if ((strcmp(zi[i],zi[j])==0)&&point[i]!=-1)
    {
               point[j]=point[i];                
    }
}
int num[501];//???? 
for (int i=0;i<501;i++)num[i]=0;
for (int i=0;i<=len-n;i++)
{   
    if (point[i]==-1)num[i]++;//printf("%d->%d\n",i,num[i]);}
    if (point[i]!=-1)num[point[i]]++;//printf("%d->%d\n",point[i],num[point[i]]);}//????????????? 
}
int max=1;
for (int i=0;i<=len-n;i++)
{
    if (point[i]==-1&&num[i]>max)max=num[i];
}

if (max==1)printf("NO");
if (max>1)
{       
          printf("%d\n",max);
          for (int i=0;i<len-n;i++)
          {
              if (num[i]==max)
              printf("%s\n",zi[i]);
          }
}
 
 
     
}
int main()
{
    char w[1000];
    char sub[1000][50];
    int s[1000]={0};
    int k,t,n=0,m=0,i,j;
    scanf("%d",&n);getchar();
    gets(w);
    
    t=strlen(w);
    
    for(i=0;i<=t-n;i++)
    {
        for(j=0;j<n;j++)
        sub[i][j]=w[i+j];
    sub[i][n]='\0';
    
    }
    for(i=0;i<=t-n;i++)
    {for(j=i;j<=t-n;j++)
            if(strcmp(sub[i],sub[j])==0)
                s[i]++;
            
    }
    for(i=0;i<t-n;i++)
        if(s[i]>m)m=s[i];
if(m==1)printf("NO\n");
else{
        printf("%d\n",m);
for(i=0;i<=t-n;i++)

if(s[i]==m)
printf("%s\n",sub[i]);
}
return 0;

}
int main(int argc, char* argv[])
{
	char a[1000];
	int n,i,j,k,len,flag=0,w,max=0,b[1000]={1};
	scanf("%d",&n);
	scanf("%s",a);
	len=strlen(a);
	for(i=0;i<1000;i++)b[i]=1;
	for(i=0;i<len-n;i++)
	{
		for(j=i+1;j<len;j++)
		{
			flag=0;
			for(k=i;k<i+n;k++)
			{
				
				if(a[k]!=a[j])
				{
					w=flag;
					flag=0;
					break;
				}
				else
				{
					flag++;
				    j++;
				}
			}
			if(flag==n)
			{
				b[i]++;
				j=j-n;
			}
			else
			{
				j=j-w;
				k=k-w;
			}
		}
	}
	for(i=0;i<1000;i++)
		if(max<b[i])max=b[i];
	if(max==1)printf("NO");
	else
	{
	printf("%d\n",max);
	for(i=0;i<1000;i++)
	{
		if(b[i]==max)
		{
			for(j=i;j<i+n;j++)
				printf("%c",a[j]);
			printf("\n");
		}
	}
	}

		
		
	return 0;
}
int main()
{
	int n = 0;
	char s[501] = {0};
	scanf("%d\n", &n);
	gets(s);
	int i = 0, j = 0, len = strlen(s);
	char word[501][7] = {0};
	int count[501] = {0};
	int top = 0;
	int maxc = 0;
	for ( i = 0; i <= len - n; i++ )
	{
		for ( j = i; j < i + n; j++ )
			word[top][j-i] = s[j];
		word[top][n] = '\0';
		for ( j = 0; j < top; j++ )
		{
			if ( strcmp(word[j],word[top]) == 0 )
			{
				count[j]++;
				if ( maxc < count[j] )
					maxc = count[j];
				break;
			}
		}
		if ( j == top )
		{
			count[top] = 1;
			if ( maxc == 0 )
				maxc = 1;
			top++;
		}
	}
	if (maxc <= 1)
	{
		printf("NO");
		return 0;
	}
	printf("%d", maxc);
	for (i = 0; i <= len-n; i++ )
	{
		if ( count[i] == maxc )
			printf("\n%s", word[i]);
	}
	return 0;
}
int main()
{
	char a[501];
	int b[501]={0},n,l,i,j,t,max,flag;
	scanf("%d",&n);
	getchar();
	gets(a);
	l=strlen(a);
	for(i=0;i<=l-n;i++)
	{
		for(j=i+1;j<=l-n;j++)
		{
			flag=0;
			for(t=0;t<n;t++)
			if(a[i+t]!=a[j+t])flag=-1;
			if(flag==0)b[i]++;
		}
	}
	max=b[0];
	for(i=0;i<=l-n;i++)
		if(max<b[i])max=b[i];
		if(max==0)printf("NO");
		else
		{
			printf("%d\n",max+1);
    for(i=0;i<=l-n;i++)
		if(b[i]==max)
		{
			t=i;
			for(j=0;j<n-1;j++)
			{
				printf("%c",a[t]);
				t++;
			}
			printf("%c\n",a[t]);
		}
		}

	return 0;
}
char str[500],sub[500][5]={0},count[500]={0},bianhao[500]={0};
int n,i,j,l,max,geshu;
int main(){
	scanf("%d",&n);
	scanf("%s",str);
	l=strlen(str);
	max=0;
	geshu=1;
	for(i=0;i<=l-n;i++){
		for(j=0;j<n;j++){
		sub[i][j]=str[i+j];
		}
	}
	for(i=0;i<=l-n;i++){
		for(j=i;j<=l-n;j++){
		   if(strcmp(sub[i],sub[j])==0) count[i]++;
		}
	}
	for(i=0;i<=l-n;i++){
		if(count[i]==max&&count[i]>1){
		   geshu++;
		   bianhao[geshu-1]=i;
		} 
	   if(count[i]>max&&count[i]>1){
		   max=count[i];
		   geshu=1;
		   bianhao[geshu-1]=i;
	   }
	}
	if(max==0) printf("NO\n");
	else{
	   printf("%d\n",max);
	   if(geshu==1){
	      printf("%s",sub[bianhao[0]]);
	   }
	   else{
	      for(i=0;i<geshu-1;i++){
	         printf("%s\n",sub[bianhao[i]]);
	      }
		  printf("%s",sub[bianhao[geshu-1]]);
	   }
	   
	}
return 0;
}
void main()
{
	unsigned long int n,j,i,len,b[500]={0},a[501]={0},c=0,max=0,m[500]={0},t=0,g=0,z=0;
	char s[501]={'\0'};
	scanf("%d",&n);
	scanf("%s",s);
	len=strlen(s);
	for(i=0;i<=len-n;i++)
		for(j=0;j<n;j++)
		{a[i]=a[i]*100+s[j+i]-32;
		}
	for(i=0;i<len-n+1;i++)
	{for(j=0;j<len-n+1;j++)
	{if(a[i]==a[j])
			{b[i]++;
	}}}
	for(i=0;i<len-n+1;i++)
		if(b[i]>1)
			c=1;
	if(c==0)
		printf("NO");
         else{
	for(g=0;g<len-n+1;g++)
		if(b[g]>max)
		max=b[g];
		z=0;
    for(i=0;i<len-n+1;i++)
		{if(b[i]==max)
		 {z=0;
			for(j=0;j<t&&i!=m[j];j++)
			if(a[i]==a[m[j]])
				z=1;
		if(z==0)
		{m[t]=i;
		t++;}}
		}

	printf("%d\n",max);
	for(j=0;j<t;j++)
	{for(i=0;i<n;i++)
		printf("%c",s[i+m[j]]);
	printf("\n");}}
}
int main(){
	char z[501];
	int	f[501];
	int n,i,j,k,p;
	int count;
	
	scanf("%d\n",&n);
	gets(z);
	for(i=0;i<strlen(z)-n+1;i++){
		f[i]=1;
	}
	

	for(i=0;i<strlen(z)-2;i++){		
		for(j=i+1;j<strlen(z)-1;j++){
			count=0;
			for(p=0;p<n;p++){
				if(z[i+p]==z[j+p]){
					count++;
				}
				else{
					break;
				}
			}
			if(count==n){
				f[i]++;
			}
		}
	}
	int max=1;
	for(k=0;k<strlen(z)-n+1;k++){
		if(f[k]>max){
			max=f[k];
		}
	}
	if(max==1){
		printf("NO\n");
		return 0;
	}
	printf("%d\n",max);

	for(k=0;k<strlen(z)-n+1;k++){
		if(f[k]==max){
			for(p=0;p<n;p++){
				printf("%c",z[k+p]);
			}
			printf("\n");
		}
			
	}
	
	return 0;
	
}
const int len=201;
int main()
{
	int len,i,j,n=0,num[10000],max=0;
	char c[10000][6],input[600];
	cin>>len;
	cin.get();
	cin.getline(input,600);
	for(i=0;i<=strlen(input)-len;i++)
	{
		char temp[6];
			for(j=0;j<len;j++)
		{
			c[n][j]=input[i+j];
		}
		c[n][len]='\0';
		n++;
	}
	for(i=0;i<n;i++)
	{
		num[i]=1;
	}
	for(i=0;i<n;i++)
	{
		for(j=i;j<n;j++)
		{
			if(strcmp(c[i],c[j])==0&&num[i]>0)
			{
				num[i]++;
				num[j]--;
			}
		}
	}
	for(i=0;i<n;i++)
	{
		if(num[i]>max) max=num[i];
	}
	if(max==1) cout<<"NO"<<endl;
	else 
	{
		cout<<max<<endl;
		for(i=0;i<n;i++)
		{
			if(num[i]==max) cout<<c[i]<<endl;
		}
	}
	return 0;
}
int main()
{
	int n;
	char s[510];
	scanf("%d",&n);
	scanf("%s",s);
	int i,j,k;
	k=0;
	char a[500][5];
	int count[500];
	for(i=0;i<500;i++)
		count[i]=1;
	int x;
	int max=0;
	for(i=0;s[i+n-1]!=0;i++)
	{
		for(j=0;j<n;j++)
		{
			a[k][j]=s[i+j];
		}
		a[k][j]=0;
		k++;
	}
	for(i=0;i<k;i++)
	{
		for(j=i+1;j<k;j++)
		{
			x=strcmp(a[i],a[j]);
			if(x==0)
				count[i]++;
		}
		if(count[i]>=max)
			max=count[i];
	}
	if(max!=1)
	{
		printf("%d\n",max);
		for(i=0;i<k;i++)
		{
			if(count[i]==max)
				printf("%s\n",a[i]);
		}
	}
	else
	{
		printf("NO");
	}
	return 0;
}
int main()
{
    char a[500],b[500][5],c[500][5];
    int n,leng,i,num[500]={0},k,j,max;
    scanf("%d\n",&n);
    gets(a);
    leng=strlen(a);
	for(i=0;i<=leng-n;i++)
	    {
	    for(j=0;j<n;j++)
	       {
	           b[i][j]=a[i+j];
		   }
		   b[i][j]='\0';
	    }
    strcpy(c[0],b[0]);
    k=1;
    
	for(i=0;i<=leng-n;i++)
       {
           for(j=0;j<k;j++)
              {
                   if(strcmp(c[j],b[i])==0)  
				   {
				      num[j]++;
				      break;
			       }
			  
			  
			  }
			if(j==k)
			{
			    strcpy(c[j],b[i]);
			    num[j]++;
			    k++;
			}


       }        
    max=num[0];
	for(i=0;i<k;i++)
   {
       if(num[i]>max) max=num[i];
   
   
   }
   
   if(max>1)
   {printf("%d\n",max);
   for(i=0;i<k;i++)
   {
      if(num[i]==max)
      printf("%s\n",c[i]);
   
   
   }}
   else printf("NO");
   return 0;
   
   



}
int main()
{
 int i,j,n,a[500],d[500],len,m,t;
 char s[500][5],b[500],c[5];
 scanf("%d\n",&n);
 gets(b);
 len=strlen(b);
 for(i=0;i<=len-n;i++)
 {
  for(j=0;j<n;j++)
    s[i][j]=b[i+j];
  s[i][n]=0;
  d[i]=i;
 }
 for(i=0;i<=len-n;i++)
  a[i]=0;
 for(i=0;i<len-n;i++)
  for(j=i+1;j<=len-n;j++)
    if(strcmp(s[i],s[j])==0) a[i]++;
 for(i=0;i<len-n;i++)
  for(j=0;j<len-n-i;j++)
   if(a[j]<a[j+1]) {m=a[j];a[j]=a[j+1];a[j+1]=m; strcpy(c,s[j]);strcpy(s[j],s[j+1]);strcpy(s[j+1],c); m=d[j];d[j]=d[j+1];d[j+1]=m;}
 if(a[0]==0) printf("NO");
 else if(a[0]-a[1]>0) {printf("%d\n",a[0]+1);puts(s[0]);}
 else 
  {
   for(i=0;i<len-n;i++)
    if(a[i]-a[i+1]>0) {m=i;break;}
   for(i=0;i<m;i++)
    for(j=0;j<m-i;j++)
      if(d[j]>d[j+1]) {strcpy(c,s[j]);strcpy(s[j],s[j+1]);strcpy(s[j+1],c);}
   printf("%d\n",a[0]+1);
   for(i=0;i<=m;i++)
     puts(s[i]);
      
   }
  
 
  return 0;
}
int main()
{
	int n,i,j,l,max=0,t;
	char s[501];
	char son[500][5];
	int cnt[500]={0},rd[500];
	scanf("%d",&n);
	scanf("%s",s);
	l=strlen(s);
	for(i=0;i+n-1<=l-1;i++)
	{
		for(j=i;j<=i+n-1;j++)
			son[i][j-i]=s[j];
		son[i][j-i]='\0';
	}
	for(i=0;i<=l-n+1;i++)
	{
		for(j=i;j<=l-n+1;j++)
			if(strcmp(son[i],son[j])==0)
				cnt[i]++;
		if(cnt[i]>max)
		{
			max=cnt[i];
			t=i;
		}
	}
	if(max==1)
		printf("NO\n");
	else
	{
		printf("%d\n",max);
		for(i=0;i<=l-n+1;i++)
			if(cnt[i]==cnt[t])
				printf("%s\n",son[i]);
	}
	return 0;
}
int main()
{
 int n,i,j,m=0;
 char a[505];
 char b[500][5];
 int c[500]={0};
 scanf("%d",&n);
 scanf("%s",&a);
 for(i=0;i<strlen(a)-n+1;i++)
 {     
     for(j=0;j<n;j++)
         b[i][j]=a[i+j];    
 }
 for(i=0;i<strlen(a)-n+1;i++)
 {     
     for(j=i;j<strlen(a);j++)
     {   
         if(strcmp(b[i],b[j])==0)
         c[i]++; 
         if(c[i]>m)
         m=c[i];
     }
 }
 if(m==1)
 printf("NO");
 else
 {
     printf("%d\n",m);
     for(i=0;i<strlen(a)-n+1;i++)
     {    
         if(c[i]==m)
         printf("%s\n",b[i]);
     }     
 }
 return 0;
}
void main()
{
	char a[500],b[500][6];
	int i,j,t[500],n,max,l;
	scanf("%d%s",&n,a);
	l=strlen(a);
	for(i=0;i<l+1-n;i++)
	{
		for(j=0;j<n;j++)
			b[i][j]=a[i+j];
		b[i][j]='\0';
		t[i]=1;
	}
	for(i=0;i<l+1-n;i++)
		for(j=i+1;j<l+1-n;j++)
			if(strcmp(b[i],b[j])==0)
				t[i]=t[i]+1;
	max=t[0];
	for(i=0;i<l+1-n;i++)
		if(t[i]>=max)
			max=t[i];
	if(max==1)
		printf("NO\n");
	else
	{	printf("%d\n",max);
		for(i=0;i<l+1-n;i++)
			if(t[i]==max)
				printf("%s\n",b[i]);}
}
int main()
{
	int n,m,s,t,c[500],x;
	char a[500],b[5];
	scanf("%d\n",&n);
	gets(a);
	for(m=0;a[m+n-1]!='\0';m++)
	{
		for(t=0;t<n;t++)
		b[t]=a[m+t];
		b[t]='\0';
		for(s=m+1,c[m]=1;a[s+n-2]!='\0';s++)
		{
		for(t=0;t<n;t++)
			if(b[t]!=a[s+t])break;
		if(t==n)c[m]++;
		}
	}
	for(t=0,x=0;a[t+n-1]!='\0';t++)
	if(x<c[t])x=c[t];
	if(x<=1)printf("NO");
		else 
		{printf("%d\n",x);
		for(t=0;a[t+n-1]!='\0';t++)
		{if(c[t]==x)for(m=0;m<n;m++)
		{if(m!=n-1)putchar(a[t+m]);
		else printf("%c\n",a[t+m]);
		}
		}
		}
	return 0;
}
int main()
{
	int n; scanf("%d",&n);
	char s[501]={' '}; scanf("%s",s);
	int len; len=strlen(s);
	struct substring{
		char ss[5];
		int count;
	}sub[500];
	int i;
	for(i=0;i<500;i++){
		memset(sub[i].ss,' ',sizeof(sub[i].ss));
		sub[i].count=0;
	}
	int entry=0;
	for(i=0;i<=len-n;i++){
		char bank[5]={' '};
		int curr;
		for(curr=0;curr<n;curr++){
			bank[curr]=s[curr+i];
		}
		int same=0;
		int k; for(k=0;k<entry;k++){
			if(strcmp(bank,sub[k].ss)==0){
				sub[k].count+=1;
				same=1;
				break;
			}
		}
		if(same==0){
			strcpy(sub[entry].ss,bank);
			sub[entry].count=1;
			entry++;
		}
	}
	int max=0;
	for(i=0;i<entry;i++){
		if(sub[i].count>max)max=sub[i].count;
	}
	if(max<2)printf("NO");
	else{
		printf("%d",max);
		for(i=0;i<entry;i++){
			if(sub[i].count==max)printf("\n%s",sub[i].ss);
		}
	}
	return 0;
}
//**************************
//*???n-gram???? **
//*?????? 1200012888 **
//*???2013.12.11**
//**************************
int main()
{
	int n;
	cin >> n;
	char buff[500] = {0};
	char word[500][5] = {0};
	cin >> buff;
	int len = strlen(buff);
	for (int i = 0 ; i < len - n + 1 ; i++)
	{
		for (int j = 0 ; j < n ; j ++)
		{
			word[i][j] = buff[i + j];
		}
	}
	int count,max_count = 0;
	for (int i = 0 ; i < len - n + 1 ; i ++)
	{
		count = 0;
		for (int j = i ; j < len - n + 1;j ++)
		{
			if (strcmp(word[i],word[j]) == 0)
			{
				count ++;
			}
		}
		if (count > max_count)
		{
			max_count = count;
		}
	}
	if (max_count <= 1)
	{
		cout << "NO" << endl;
		return 0;
	}
	else
	{
		cout << max_count << endl;
	}
	for (int i = 0 ; i < len - n + 1 ; i ++)
	{
		count = 0;
		for (int j = i ; j < len - n + 1;j ++)
		{
			if (strcmp(word[i],word[j]) == 0)
			{
				count ++;
			}
		}
		if (count == max_count)
		{
			cout << word[i] << endl;
		}
	}
	return 0;
}
int main()
{
	int n;
	char str[500];
	scanf("%d",&n);
	getchar();
	gets(str);
	char ste[500][500];
    int a[500]={0};
	int i,j;
	int m,k=0;
	m=strlen(str);
	for(i=0;i<=m-n;i++)
	{
		for(j=0;j<n;j++)
		{
			ste[i][j]=str[j+i];
		}
		ste[i][n]='\0';
	}
	int max=0;
	for(i=0;i<=m-n;i++)
	{
		for(j=i;j<=m-n;j++)
		{
			if(strcmp(ste[i],ste[j])==0)
			{
				a[i]+=1;
			}
			if(a[i]>max)
			{
				max=a[i];
			}
		}
	}
		if(max==1)
		{
			printf("NO");
		}
		else
		{
			printf("%d\n",max);
	

for(i=0;i<=m-n;i++)
{
	if(a[i]==max)
	{
		puts(ste[i]);
	}
}
		}
return 0;
}
int main ()
{
	char c[505]={0},str[505][6]={'\0'};
	int n,len,i,j,k,v,f[505]={0},count=0;
	scanf("%d",&n);
	getchar();
	gets(c);
	for(len=0;c[len]!='\0';len++);
	for(i=0;c[i+n-1]!='\0';i++)
	{
		for(j=0;j<n;j++)
		{
			str[i][j]=c[i+j];
		}
	}
	for(i=0;c[i+n-1]!='\0';i++)
	{
		for(j=i+1;c[j+n-1]!='\0';j++)
		{
			v=1;
			for(k=0;k<n;k++)
			{
				if(str[i][k]!=str[j][k])
				{
					v=0;
				}
			}
			if(v==1)
			{
				f[i]=f[i]+1;
			}
		}
	}
	int max=f[0];
	for(i=0;c[i+n-1]!='\0';i++)
	{
		if(f[i]>max)
			max=f[i];
	}
										for(i=0;c[i+n-1]!='\0';i++)
										{
											if(f[i]==max)
											{
												for(j=i;c[j+n-1]!='\0';j++)
												{
													v=1;
													for(k=0;k<n;k++)
													{
														if(str[i][k]!=str[j][k])
														{
															v=0;
														}
													}
													if(v==1)
													{
														count=count+1;
													}
												}
												break;
											}
										}
										if(count<=1) {printf("NO\n");return 0;}
										printf("%d\n",count);
	for(i=0;c[i+n-1]!='\0';i++)
	{
		if(f[i]==max)
		{
			printf("%s\n",str[i]);
		}
	}
	return 0;
}
int main()
{
	int i,n,m,j,k,b[501],d,max,h;
    char a[501],c[501][10];

scanf("%d",&n);
getchar();
gets(a);
m=strlen(a);
for(i=0;i<m-n+1;i++)
{

	b[i]=0;
	for(j=0;j<n;j++)
	{
		c[i][j]=a[i+j];
	}
	
	for(j=0;j<m-n+1;j++)
	{
		d=0;
		for(k=0;k<n;k++)
		{
			if(c[i][k]!=a[j+k])
			{continue;}else
			{d++;}
		}
		if(d==n)
		{
			b[i]++;
		}
	}
}			

max=0;
for(i=0;i<m+1-n;i++)
{
	if(b[i]==1)
	{b[i]=0;}
	if(b[i]>max)
	{
		max=b[i];
	}
}
if(max!=0)
printf("%d\n",max);
for(i=0;i<m+1-n;i++)
{
     if(b[i]==max&&max!=0)
	 {
		 h=0;
		 for(j=0;j<i;j++)
		 {
			 d=0;
			 for(k=0;k<n;k++)
			 {
				 if(c[i][k]==c[j][k])
				 {
					 d++;
				 }
			 }
			 if(d==n)
			 {
				 h=1;
			 }
		 }
		 if(h==1)
		 {continue;}
		 for(j=0;j<n-1;j++)
		 {
			 printf("%c",c[i][j]);
		 }
		 printf("%c\n",c[i][n-1]);
	 } 
}
 if(max==0)
	 {
		 printf("NO");
	 }
return 0;
}
char strin[503]={0},str2[10]={0};
int jilu[500]={0},used[500]={0};
int main()
{
	int i,j,len,k,n,pd=0,maxtime=0;
	cin>>n;
	getchar();
	cin.getline(strin,500);
	len=strlen(strin);
	for(i=0;i<=len-n;i++)
	{
		if(used[i]==1) continue;
		for(j=0;j<n;j++) str2[j]=strin[i+j];//??????????
		for(k=0;k<=len-n;k++)//???????
		{
			if(used[k]==1) continue;//?????,?????
			pd=1;//?????????
			for(j=0;j<n;j++) //??????,??????
			{
				if(strin[k+j]!=str2[j])
				{
					pd=0;//????????
					break;
				}
			}
			if (pd==1) //????
			{
				jilu[i]++;//??+1
				used[k]=1;//?????????
			} 
		}
		maxtime=(maxtime>jilu[i])?maxtime:jilu[i];//??????
	}
	if(maxtime==1)cout<<"NO";//??????1?,??no
	else//????????????????
	{
		cout<<maxtime<<endl;
		for(i=0;i<=len-n;i++)
		{
			if(jilu[i]==maxtime)
			{
				for(j=0;j<n;j++)cout<<strin[i+j];
				cout<<endl;
				
			}
		}
	}
	return 0;
}