semeru/Code-Code-CloneDetection-POJ104 huggingface dataset:
//********************************
//*n-gram????*****************
//*???1300012920**************
//********************************
int main()
{
	char word[600];
	char gram[600][10] , temp[600][10];//?????????
	int cnt[600]={0};
	int count=0;
	int i , j , n  , len , max = 1;
	cin >> n;
        cin.get();
	cin.getline(word,600);//??????
	len = strlen(word);//??????????????????????
	for(i = 0 ; i <  len - n + 1 ; i++)
	{
		for(j = i ; j <= i + n - 1 ; j++)
		{
			*(gram[i]+count) = *(word+j);
			count++;
		}
		*(gram[i]+count) = '\0';
		count = 0;
	}
	//???????gram[][]???temp[][]?
	for(i = 0 ; i < len - n + 1 ; i++)
		strcpy(*(temp+i),*(gram+i));
	//gram?temp??????gram?????
	//?????????????
	for(i = 0 ; i < len - n + 1 ; i++)
		for(j = 0 ; j < len - n + 1 ; j++)
		{
			if(strcmp(*(gram+i),*(temp+j)) == 0)
				*(cnt+i) += 1;
		}
	//??????
	for(i = 0 ; i < len - n + 1 ; i++)
	{
		if(*(cnt+i) > max)
			max = *(cnt+i);
	}
	//??????1???????
	if(max > 1)
	{
		cout << max << endl;
		for(i = 0 ; i < len - n + 1 ; i++)
		{
			if(*(cnt+i) == max && i == 0)//??????????????????
				cout << *(gram+i) << endl;
			if(*(cnt+i) == max && i > 0)
			{
				for(j = 0 ; j < i  ; j++)//??????????????????????????????
				{
					if(strcmp(*(gram+i),*(gram+j)) == 0)break;
					if(j == i - 1)
						cout << *(gram+i) << endl;
				}
			}
		}
	}
	//?????????1???NO
	else
		cout << "NO" << endl;
	return 0;
}
int main()
{
char c[500]={0},g[500][5]={0};
int i=0,j=0,m,n,y[500]={0},num[500]={0},k=0;
scanf("%d\n",&n);
gets(c);
j=strlen(c)-n+1;
for(i=0;i<j;i++)
{
   for(k=0;k<n;k++)
   {g[i][k]=c[i+k];}
}
i=0;
for(i=0;i<j;i++)
{
  if(y[i]==0)
  {
   for(k=i+1;k<j;k++)
    {
     if(strcmp(g[k],g[i])==0)
     {num[i]++;y[k]=1;}
    }
  }
}
i=1;m=num[0];
for(i=1;i<j;i++)
{
if(y[i]==0)
{if(num[i]>m) m=num[i];}
}
i=0;
if(m==0)
printf("NO");
else
{printf("%d\n",m+1);

for(i=0;i<j;i++)
{
 if(y[i]==0)
  {
   if(num[i]==m)
   puts(g[i]);
  }
}}
return 0;
}
void main()
{
	int n,i,j,k,l,x[500],max;
	char s[500],s1[500][5];
	scanf("%d%s",&n,s);
	l=strlen(s);
	for(i=0;i<=l-n;i++)
		for(j=i,k=0;k<n;j++,k++)
			s1[i][k]=s[j];
	for(i=0;i<=l-n;i++)
	{
		x[i]=1;
		for(j=i+1;j<=l-n;j++)
			if(strcmp(s1[i],s1[j])==0)
			{
				x[i]++;
				x[j]=-500;
			}
	}
	max=x[0];
	for(i=1;i<=l-n;i++)
		if(x[i]>max)
			max=x[i];
	if(max==1)
		printf("NO");
	else{
	printf("%d\n",max);
	for(i=0;i<=l-n;i++)
		if(x[i]==max)
			printf("%s\n",s1[i]);	
	}
}
int main()
{
    char s[1000],s1[10];
    int i,j,k,l,m=0,n,x;
    scanf("%d",&n); gets(s); gets(s);
    for (i=0;i<strlen(s);i++)
    {
        for (j=0;j<n;j++)
            s1[j]=s[j+i];
        x=0;
        for (j=i;j<strlen(s);j++)
        {
            l=0;
            for (k=0;k<n;k++)
                if (s[j+k]!=s1[k]) l=1;
            if (l==0) x++;
        }
        if (x>m) m=x;
    }
    if (m<=1) printf("NO");
    else
    {
    printf("%d\n",m);
    for (i=0;i<strlen(s);i++)
    {
        for (j=0;j<n;j++)
            s1[j]=s[j+i];
        s1[n]='\0';
        x=0;
        for (j=i;j<strlen(s);j++)
        {
            l=0;
            for (k=0;k<n;k++)
                if (s[j+k]!=s1[k]) l=1;
            if (l==0) x++;
        }
        if (x==m) puts(s1);
    }
    }
}
int main(){
	
	int a[501],b,c,n,m,t,j,l,jl;
	char s[501],u[501][501];
	scanf("%d",&n);
	scanf("%s",s);
	l=strlen(s);

	for(b=0;b<=l-n;b++){
		for(c=0;c<n;c++){
			u[b][c]=s[b+c];
		}
		u[b][n]='\0';
		
	}

	jl=0;
	for(b=l-n;b>=0;b--){
		a[b]=1;
		for(c=b+1;c<=l-n;c++){
			if(strcmp(u[c],u[b])==0){
				a[b]=a[c]+1;
				if(a[b]>jl){jl=a[b];
				}
				break;
			}
		}
	}
	
		
	
	
	
	if(jl==0||jl==1){
		printf("NO");
			return 0;
	}
	printf("%d\n",jl);
	for(b=0;b<=l-n;b++){
		if(a[b]==jl){
		puts(u[b]);
		}
	}
	return 0;
}
int main()
{
	char in[510],a[255][5];
	int n=0,num[255];
	cin>>n;
	cin.get();
	cin.getline(in,510);
	int len=strlen(in),k=0,i=0,j=0;
	for(i=0;i<len;i++)
		num[i]=1;
	for(i=0;i<=len-n;i++)
	{
		strncpy(a[k],in+i,n);
		a[k][n]='\0';
		k++;
	}

//for(i=0;i<k;i++)
//	cout<<a[i]<<endl;

	for(i=0;i<k-1;i++)
	{
		for(j=i+1;j<k;j++)
		{
			if( strcmp(a[i],a[j]) ==0 )
			{
				num[j]=0;
				if(num[i])
					num[i]++;
			}	
		}
	}


//for(i=0;i<k;i++)
//		cout<<num[i]<<endl;

	int max=0;
	for(i=0;i<k;i++)
	{
		if(num[i]>max)
			max=num[i];
	}
	
	if(max==1)
	{
		cout<<"NO"<<endl;
		return 0;
	}
	cout<<max<<endl;
	for(i=0;i<k;i++)
	{
		if(num[i]==max)
			cout<<a[i]<<endl;
	}
	return 0;

}
luru(int i,char s[],char temp[],int k)
{
	int j;
	for(j=0;j<k;j++)
		temp[j]=s[i+j];
	temp[k]=0;
}

main()
{
	char s[510]={0},temp[10]={0};
	char gram[510][10]={{0}};
	int b[510]={0};
	int n,max=1,t=0;
	int len;
	int i,j;

	scanf("%d\n",&n);
	gets(s);
	len=strlen(s);

	for(i=0;i<len+1-n;i++){
		luru(i,s,temp,n);
		for(j=0;j<t;j++)
			if(strcmp(temp,gram[j])==0)
				b[j]++;
		if(j==t)
		{strcpy(gram[t],temp);b[t]++;t++;}
	}

	for(i=0;i<t;i++)
		if(b[i]>max) max=b[i];

	if(max==1) printf("NO");
	else
	{
		printf("%d\n",max);
		for(i=0;i<t;i++)
			if(b[i]==max) printf("%s\n",gram[i]);
	}
}
void main()
{
	char s[505],n,x[505]={0},max=1,k;
	int i,j;
	scanf("%d",&n);
	scanf("%s",s);
	int l=strlen(s);
	for(i=0;i<l-n+1;i++)
	{
		for(j=i;j<l-n+1;j++)
		{
			for(k=0;k<n;k++)
				if(s[i+k]!=s[j+k])break;
			if(k==n)x[i]++;
		}
	}
	for(i=0;i<l;i++)if(x[i]>max)max=x[i];
	if(max==1)printf("NO");
	else
	{
		printf("%d\n",max);
		for(i=0;i<l;i++)if(x[i]==max)
		{
			for(k=0;k<n;k++)printf("%c",s[i+k]);
			printf("\n");
		}
	}
}
//*****************************************
//** ???Dec 11, 2013 - n-gram???? **
//** ?????? 1300012719             **
//** ???2013.12.14                    **
//*****************************************
int main()
{
	char c[501][5], str[501], temp[5];                       //c????????n????,str???????,temp????str????n????
	int freq[501], maxfreq = 1, i, j, n, len, cnt = 0;            //freq??????????????,maxfreq?????,flag?????????????,cnt??????????????
    memset(c,'\0',2505);
	memset(str,'\0',501);
	cin >> n;                                                //??????????,???????????,???freq
	cin.get();
	cin.getline(str,501);
	len = strlen(str);
	memset(freq,0,501);
	for (i = 0; i <= strlen(str) - n; i++)
	{
		for (j = 0; j < n; j++)
			*(*(c + i) + j) = *(str + i + j);
		*(*(c + i) + j) = '\0';
		*(freq + i) = 1;
	}
	for (i = 0; i < len - n; i++)
	{
		if (*(freq + i))
		{
			for (j = i + 1; j <= len - n; j++)
			{
				if (strncmp(*(c + i),*(c + j),n) == 0)
				{
					*(freq + i) = *(freq + i) + 1;
					*(freq + j) = 0;
				}
			}
		}
	}
	for (i = 0; i < len - n; i++)
	{
		if (maxfreq < *(freq + i))
			maxfreq = *(freq + i);
	}
	if (maxfreq == 1)
	{
		cout << "NO" << endl;
		return 0;
	}
	cout << maxfreq << endl;
	for (i = 0; i < len - n; i++)
	{
		if (*(freq + i) == maxfreq)
			cout << *(c + i) << endl;
	}
	return 0;
}
//
//  main.c
//  n-gram????
//
//  Created by ?  on 12-12-16.
//  Copyright (c) 2012? ? . All rights reserved.
//


char b[500][6]={0};
int p=1;

int f(char s[],int n,int l)
{
    int i,j,k=0,q=0;
    int t[500]={0};
    char w[500][6]={0},a[6]={0};
    for(i=0;i<l-n+1;i++)
    {
        for(j=0;j<n;j++)
        {
            a[j]=s[i+j];
        }
        for(j=0;j<k+1;j++)
            if(strcmp(a,w[j])==0) break;
        if(j<k+1)
            t[j]=t[j]+1;
        else
        {
            strcpy(w[k],a);
            t[k]=1;
            k++;
        }
    }
    for(j=0;j<k;j++)
        if(t[j]>p)
            p=t[j];
    for(j=0;j<k;j++)
    {
        if(t[j]>=p&&t[j]>1)
        {
            strcpy(b[q],w[j]);
            q++;
        }
    }

    if(p==1) return 0;
    else return q;
}


int main()
{
    int n;
    char s[501]={0};
    scanf("%d\n",&n);
    gets(s);
    int q,i;
    q=f(s,n,strlen(s));
    if(q==0) printf("NO\n");
    else
    {
        printf("%d\n",p);
        for(i=0;i<q;i++)
            puts(b[i]);
    }
    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 flagstr[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)
		cout << "NO" << endl;
	else
		pick();
	return 0;
}
void exp(int a)
{
	if (a == len - n + 1)
		return;

	int 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)
			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;
		}
}
//***************************
//*???n-gram????    **
//*????? 1300012921   **
//*???2013.12.18        **
//*************************** 

char ch[520];
int n;

int main()
{
	char zichuan[520][6] = {0};
	int zichuanshu[520] = {0};
	char *p = NULL, *q = NULL;
	int flag1, flag2, dijige = 0;
	cin >> n;
	cin.get();
	cin.getline(ch, 520);
	for(q = ch; *(q + n - 1) != '\0'; q++)
	{
		flag2 = 1; //??????????????? 
		for(p = q; *(p + n - 1) != '\0'; p++)
		{
			if(*p == *q)
			{
				flag1 = 1;
				for(int i = 2; i <= n; i++)
				{
					if(*(p + i - 1) != *(q + i - 1))
					{
						flag1 = 0;
						break;
					}
				} // ???p????????????????? 
				if(flag1)
				{
					if(flag2)
					{
						for(int i = 0; i < n; i++)
							*(zichuan[dijige] + i) = *(p + i);	
						flag2 = 0;
					}
					
					zichuanshu[dijige]++;
				} 
			}
		}
		dijige++;
	}
	int max = 1;
	for(int i = 0; i <= 519; i++)
	{
		if(zichuanshu[i] > max)
			max = zichuanshu[i];
	}
	
	if(max > 1)
	{
		cout << max << endl;
		for(int i = 0; i<= 519; i++)
		{
			if(zichuanshu[i] == max)
				{
				for(int j = 0; j < n; j++)
					cout << *(zichuan[i] + j);
				cout << endl;
				}
		}
	}
	else
		cout << "NO" << endl;
	return 0;
}
int main()
{
	char a[504]={0};
	char x[500][8],tmp[8];
	int times[500]={0};
	int num=0;
	int n,i,j,len;
	scanf("%d",&n);
	getchar();
	gets(a);
	len=strlen(a);
	for(i=0;i<len-n+1;i++)
	{
		for(j=0;j<n;j++)tmp[j]=a[i+j];
		tmp[n]=0;
		for(j=0;j<num;j++)
		{
			if(strcmp(x[j],tmp)==0)
			{
				times[j]++;
				break;
			}
		}
		if(j==num)
		{
			strcpy(x[num],tmp);
			times[num]=1;
			num++;
		}
	}
	int max=0;
	for(i=0;i<num;i++)if(times[i]>max)max=times[i];
	if(max==1)
	{
		printf("NO\n");
		goto Eof;
	}
	printf("%d\n",max);
	for(i=0;i<num;i++)if(times[i]==max)puts(x[i]);
Eof:;
	return 0;
}
void main(void)
{
	int n;
	scanf("%d\n",&n);
	char s[501];
	gets(s);
	int len=strlen(s);

	int i,j;
	char sub[500][5];
	for(i=0;i<=len-n;i++)
	{
		for(j=0;j<=n-1;j++)
			sub[i][j]=s[i+j];
		sub[i][n]=0;
	}

	int time[500],t=0,x=1;
	for(i=0;i<=len-n-1;i++)
	{
		time[i]=1;

		if(sub[i][0]!=0)
		{
			for(j=i+1;j<=len-n;j++)
				if(strcmp(sub[i],sub[j])==0)
				{
					time[i]++;
					sub[j][0]=0;
				}

			if(x<time[i])
				x=time[i];
		}
	}

	if(x==1)
		printf("NO\n");
	else
	{
		printf("%d\n",x);
		for(i=0;i<=len-n;i++)
			if(time[i]==x)
				printf("%s\n",sub[i]);
	}
}
//***************************
//*?????? 1300012809 **
//*???2013-12-13        **
//*???n-gram????    **
//***************************
int main()
{
	int n, i, j, k, changdu, max1 = 0;                          //????
	int jishu[550] = {0};                                       
	char *p = NULL;                                             //????
	char c[550], bz[550][550];
	cin >> n;                                                   //???????
	cin.get();                                                  //????
	cin.getline(c, 550);                                        //?????
    changdu = strlen(c);                                        //???????
	for (i = 0; i < 550; i++)
		jishu[i] ++;                                            //???????1
	for (i = 0; i <= changdu - n; i++)
		for (j = 0.; j <= n - 1; j++)
			bz[i][j] = c[i + j];                                //????????bz???
	for (i = 0; i <= changdu - n; i++)
		for (j = n; j <= 449; j++)
			bz[i][j] = 0;                                       //?????????\0
	for (i = 0; i <= changdu - n; i++)
	{
		for (j = i + 1; j <= changdu - n; j++)
		{
			if (strcmp(bz[i], bz[j]) == 0)
			{
				jishu[i]++;                                     //?????????????
			}
		}
		if (jishu[i] > max1)
			max1 = jishu[i];                                    //???????
	}
	p = bz[0];
	if (max1 > 1) 
	{
		cout << max1 << endl;                                   //?????
		for (i = 0; i<= changdu - n; i++)
		{
			if (jishu[i] == max1)
			{
				for (j = 0; j < n; j++)
					cout << *(p + j);                           //??????
				cout << endl;
			}
			p = bz[i + 1];                                      //????????
		}
	}
	else
		cout << "NO" << endl;                                   //??????????NO
		

	return 0;
}
int main()
{
	int n, i=0, j, k=0, cnt[500]={0}, largest, *q=&cnt[0];
	char str[500], gram[500][5], *p=&str[0];
	cin >> n;
	cin >> str;
	while (i<=strlen(str)-n)
	{
		for (j=0;j<n;j++)
		{
			*(gram[k]+j) = *(p+i);
			i++;
		}
		i = i-n+1;
		k++;
	}
	for (i=0;i<k;i++)
	{
		*(gram[i]+n) = '\0';
	}
	for (i=0;i<k;i++)
	{
		for (j=0;j<k-i;j++)
		{
		    if (strcmp(*(gram+i),*(gram+i+j)) == 0)
				*(q+i) = *(q+i)+1;
		}
	}
	largest = *q;
	for (i=1;i<k-1;i++)
	{
	    if (*(q+i) > largest)
		{
		    largest = *(q+i);
		}
	}
	if (largest <= 1)
		cout << "NO" << endl;
	else
	{
	    cout << largest << endl;
	    for (i=0;i<k;i++)
		{
		    if (*(q+i) == largest)
			    cout << *(gram+i) << endl;
		}
	}
	return 0;
}
int main(){
    int n,l,e=0,s[500]={0},max,ss[500]={0};
    char a[501];
    scanf("%d",&n);
    scanf("%s",a);
    l=strlen(a);
    for(int i=0;i<l-n+1;i++){
            for(int j=i+1;j<l-n+1;j++){
                    for(int k=0;k<n;k++){
                            if(a[i+k]==a[j+k]){
                            e++;      
                                               }
                            }
                    if(e==n){
                             s[i]++;
                             }
                             e=0;
                    }     
            }
            max=s[0];
    for(int p=0;p<l-n+1;p++){
            if(max<s[p]){
                         max=s[p];
                         }
            }
           int ee=0;
    for(int q=0;q<l-n+1;q++){
            if(max==s[q]){
                          ss[ee]=q;
                          ee++;
                          } 
            }
            if(max!=0){
            printf("%d",max+1);
    
    for(int r=0;r<ee;r++){
            printf("\n");
            for(int t=0;t<n;t++){
                    printf("%c",a[ss[r]+t]);
}
    
}
    
}
else{
     printf("NO");
     }
    

    return 0;
}
void main()
{
	char a[500],b[500][5]={'\0'};
	int n,i,j,k,t,p=0,m[500]={0};
	scanf("%d",&n);
	getchar();
	gets(a);
	
	k=strlen(a);
	for(i=0;i<k-n+1;i++)
	{
		for(j=i;j<n+i;j++)
		{
			b[i][j-i]=a[j];
		}
		b[i][n] = '\0';
		//printf("%s\n",b[i]);
	}

	t=0;
    for(i=0;i<k-n+1;i++)
	{
		if(m[i]!=1)
		{
			m[i]=0;
		
	    	for(j=i;j<k-n+1;j++)
			{
		       if(strcmp(b[i],b[j])==0)
			   {
				m[i]=m[i]+1;
				m[j]=1;
			   }
			}
			if(m[i]>t)
			{
				t=m[i];
			//	printf("%d %s\n",i, b[i]);
			}
		
		    if(m[i]==1)
			p=p+1;

		}
		//printf("%d\n",m[i]);
	}

	if(p==k-n+1)
		printf("NO");
	else
	{
		printf("%d\n",t);
		for(i=0;i<k-n+1;i++)
		{
			if(m[i]==t)
				printf("%s\n",b[i]);
		}
	}
//	printf("1");
}
int main()
{
	int i,j,n,m,k,l;
	int a[500];
	char c[500],e[6];
	char d[500][6];
	scanf("%d",&n);
	scanf("%s",c);
	m=strlen(c);
	for(i=0;i<m-n+1;i++)
	{
		a[i]=0;
		for(j=0;j<n;j++)
			d[i][j]=c[i+j];
	}
	for(i=0;i<m-n+1;i++)
	{
		for(j=i+1;j<m-n+1;j++)
		{
			for(k=0,l=0;k<n;k++)
			{
				if(d[i][k]!=d[j][k])
				{l=1;break;}
			}
			if(l==0)
			{
				a[i]++;
			}
		}
	}
	for(i=0;i<m-n+1;i++)
	{
		for(j=i+1;j<m-n+1;j++)
		{
			if(a[j]>a[i])
			{
				l=a[i];a[i]=a[j];a[j]=l;
				strcpy(e,d[i]);strcpy(d[i],d[j]);strcpy(d[j],e);
			}
		}
	}
	if(a[0]==0)
		printf("NO\n");
	else
	{
	printf("%d\n",a[0]+1);
	printf("%s\n",d[0]);
	for(i=1;i<m-n+1;i++)
	{
		if(a[i]==a[0])
			printf("%s\n",d[i]);
		else
			break;
	}
	}
	return 0;
}
int main()
{int b[2000]={0},n,i,j,k,l,m,max,count=0;
char a[3000],c[10];
scanf("%d\n",&n);
gets(a);
m=strlen(a);

for(i=0;i<m-n;i++)
{
	for(j=0;j<n;j++)//???????c 
{c[j]=a[i+j];}
b[i]=1;

for(k=i+1;k<m;k++)//bijiao
	{for(j=0;j<n;j++)

	{if(c[j]==a[k+j]){if(j==n-1) b[i]++;}//????b++ 
	else break;}
	}	
}

max=0;
for(i=0;i<m;i++)
{if(b[i]>max)max=b[i];}

if(max>1)
{printf("%d\n",max);
for(i=0;i<m;i++)
{if(b[i]==max)
{for(j=0;j<n;j++)
printf("%c",a[i+j]);
printf("\n");
}}}
else printf("NO\n");



getchar();
getchar();
getchar();
}
int main()
{
	int n,i,j,max=1;
	char x[600]={0},y[600][600]={0};
	scanf("%d%s",&n,x);
	int len=strlen(x);
	for(i=0;i<len-n+1;i++)
	{
		for(j=0;j<n;j++)
			y[i][j]=x[i+j];
	}
	int flag[600]={0};
	int time[600];
	for(i=0;i<600;i++)
		time[i]=1;
	for(i=0;i<len-n;i++)
	{
		if(flag[i]==1)continue;
		for(j=i+1;j<len-n+1;j++)
		{
			if(strcmp(y[i],y[j])==0)
			{
				time[j]++;
				time[i]++;
				flag[j]=1;
			}	
		}
		if(time[i]>max)
			max=time[i];
	}
	if(max==1)printf("NO\n");
	else
	{
		printf("%d\n",max);
		for(i=0;i<=len-n;i++)
		{
			for(j=i-1;j>=0;j--)
			{
				if(strcmp(y[j],y[i])==0)
					goto L;
			}
			if(max==time[i])
				printf("%s\n",y[i]);
L:;
		}
	}
	return 0;
}
int main(){
	char zfc[500];
	char ng[500][500];
	int sz[500];
	int imax[500];
	int ximax[500];
	int n,m,i,t,k,max,a,d,e;
	t=0;d=0;
	scanf("%d",&n);
	scanf("%s",&zfc);
	m=strlen(zfc);
	for(i=0;i<=m-n;i++){
		for(k=i;k<i+n;k++){
			ng[i][k-i]=zfc[k];
		}
	}
	for(i=0;i<m;i++){
		sz[i]=0;
	}
	for(i=1;i<=m-n;i++){
	  for(a=1;a<=i;a++){
		for(k=0;k<n;k++){
			if(ng[i][k]==ng[i-a][k]){d++;}
		}
       if(d==n){sz[i]++;}
	   d=0;
	  }
	}
	for(i=0;i<=m-n;i++){
		if(i==0){max=sz[i];}
		else if(sz[i]>max){max=sz[i];}
	}
	for(i=0;i<=m-n;i++){
		if(sz[i]==max){imax[t]=i;t=t+1;}
	}
    for(a=0;a<t;a++){ximax[a]=0;}
	d=0;
	for(i=0;i<=m-n;i++){
	  for(a=0;a<t;a++){
		for(k=0;k<n;k++){
			if(ng[i][k]==ng[imax[a]][k]){d++;}
		}
       if((d==n)&&(ximax[a]==0)){ximax[a]=i-1000;d=0;break;}
	   else{d=0;}
	  }
	}
	 for(a=0;a<t;a++){ximax[a]=ximax[a]+1000;}
	   for(a=0;a<t;a++){imax[a]=ximax[a];}
	for(k=1;k<=t;k++){
	for(i=0;i<t-k;i++){
			if(imax[i]>imax[i+1]){
					e=imax[i+1];
					imax[i+1]=imax[i];
					imax[i]=e;
			}
	}
}
	if(max<=0){printf("NO");}
	else{printf("%d\n",max+1);
	for(i=0;i<t;i++){
		for(k=0;k<n;k++){
			if(k==n-1){printf("%c\n",ng[imax[i]][k]);}
			else{printf("%c",ng[imax[i]][k]);}
		}
	}
	}
	return 0;
}
int main(int argc, char *argv[])
{
  int c[500]={0},i,j,k=0,n;
  char a[500]={'\0'};
  char b[500][5]={'\0'};
  scanf("%d",&n);
  getchar();
  gets(a);
  for(i=0;a[i+n-1]!='\0';i++)
  {
       for(j=0;j<n;j++)
       b[i][j]=a[i+j];
  }
  for(i=0;a[i+n-1]!='\0';i++)
  {
       for(j=i;a[j+n-1]!='\0';j++)
       {
             if(strcmp(b[i],b[j])==0)
             c[i]++;
       }
  }
  for(i=0;c[i]>0;i++)
  {
      if(c[i]>k)
      k=c[i];
  }
  if(k==1)
  printf("NO");
  else
  {
  printf("%d\n",k);
  for(i=0;a[i+n-1]!='\0';i++)
  {
       if(c[i]==k)
       printf("%s\n",b[i]);
  }}
  return 0;
}
int main()
{
 int n,changdu;
 scanf("%d",&n);
 char gram[501],bijiao[500];
 scanf("%s",&gram);
 changdu=strlen(gram);
 int paohui[500]={0};
 for(int i=0;i<changdu-(n-1);i++)
 {
  for(int r=0;r<n;r++)
   bijiao[r]=gram[i+r];
  if(paohui[i]!=0)
   continue;
  else
  {
   for(int r=i;r<changdu-(n-1);r++)
   {
   	for(int q=0;q<n+1;q++)
   	{
   	 if(q==n)
   	 {
   	  paohui[r]++;
	  paohui[i]++;
	  if(r==i)
	   paohui[i]--;
	  break;	
   	 }
   	 else
   	 {
   	  if(bijiao[q]!=gram[r+q])
   	   break;
   	 }
   	}
   }
  }
 }
 int zuiduo[500],cishu=0,jige=0;
 for(int m=0;m<changdu-(n-1);m++)
 {
  if(cishu==paohui[m])
  {
   zuiduo[jige]=m;
   jige++;
  }
  if(cishu<paohui[m])
  {
   jige=0;
   zuiduo[jige]=m;
   jige++;
   cishu=paohui[m];
  }
 }
 if(cishu==1)
  printf("NO\n");
 else
 {
  printf("%d\n",cishu);
  for(int i=0;i<jige;i++)
  {
   for(int r=0;r<n;r++)
    printf("%c",gram[zuiduo[i]+r]);
   printf("\n");
  }
 }
 return 0;
}
int main()
{
	char a[550];
	int n=0;
	cin>>n;
	cin.get();
	cin.getline(a,550);
	int len=strlen(a);
	char *p=a,b[550][6]={0},c[550][6]={0};
	int num[550]={0};
	for(int i=0;i<=len-n;i++)
	{
		int j=0;
		for(;j<n;j++)
		{
			b[i][j]=a[j+i];
		}
		b[i][j]='\0';
		//cout<<b[i]<<endl;
	}
	for(int i=0;i<len-n;i++)
	{
		for(int j=i+1;j<=len-n;j++)
		{
			if(strcmp(b[i],b[j])==0)
				num[i]++;
		}
	}
	int max=0;
	for(int i=0;i<len-n;i++)
	{
		if(max<num[i])
			max=num[i];
	}
	if(max==0)cout<<"NO";
	else
	{
		cout<<max+1<<endl;
		for(int i=0;i<len-n;i++)
		{
			if(num[i]==max)
			{
				cout<<b[i]<<endl;
			}
		}
	}
	return 0;
}
int n,m,i,j,ans,f[510];
char ss[510],s[510][510];
int main() 
{
	cin >> n >> ss;
	m=strlen(ss)-n+1;
	for (i=0;i<m;i++)
		strncpy(s[i],ss+i,n);
	for (i=0;i<m;i++) 
	{
		for (j=i;j<m;j++)
			if (strcmp(s[i],s[j])==0) 
				f[i]++;
		if (ans<f[i]) ans=f[i];
	}
	if (ans>1) {
		cout << ans << endl << endl;
		for (i=0;i<m;i++)
			if (f[i]==ans) 
				cout << s[i] << endl << endl;
	} else cout << "NO" << endl;
	return 0;
}
void main()
{
	int n, len, a[501], sign, max, *pa;
	char str[501]={'\0'}, *ps,*pj, *pk;
	scanf("%d",&n);
	scanf("%s",str);
	len=strlen(str);
	for(ps=str, pa=a; ps<(str+len); ps++, pa++)
	{
		*pa=1;
		for(pj=ps+1; pj<(ps+1+len); pj++)
		{
			sign=0;
			for(pk=pj; pk<pj+n; pk++)
			{
				if(*pk != *(ps + (pk-pj) ) )
				{
					sign=1;
					break;
				}
			}
			if(sign==0)
				(*pa)++;
		}
	}//????
	for(max=0, pa=a; pa<(a+len); pa++)
	{
		if(*pa>max)
			max = *pa;
	}
	if(max<=1)
		printf("NO\n");
	else
	{
		printf("%d\n",max);
		for(ps=str, pa=a; ps<(str+len); ps++, pa++)
		{
			if(*pa==max)
			{
				for(pk=ps; pk<(ps+n); pk++)
					printf("%c",*pk);
				printf("\n");
			}
		}
	}
}
//*******************************
//*???n-gram????        **
//*?????? 1300012965     **
//*???20131211              **
//*******************************
int main()
{
	char a[501];
	int f[501] = {0}, g[501] = {0};
	int i, j, n, m, nlen, co = 0, count = 0, t, t1;
	char *p, *q; 
	for(int x=0; x<=500; x++)
		g[x] = x;//???????
	cin >> n >> a;
	nlen = strlen(a);//????
	for(i=0; i<=nlen-n; i++)
	{
		count = 0;
		p = &a[i];
		for(j=i; j<=nlen-n; j++)
		{
			co = 0;
			q = &a[j];
			for(int k=0; k<=n-1; k++)
			{
				if(*(p+k) == *(q+k))
					co++;//?????
			}
			if(co == n)//????????
				count++;//???1
		}
		f[i] = count;
	}
	for(int x=0; x<=nlen-n-1; x++)
		for(int y=0; y<=nlen-n-x-1; y++)
		{
			if(f[y] < f[y+1])
			{
				t = f[y];
				f[y] = f[y+1];
				f[y+1] = t;//??
				t1 = g[y];
				g[y] = g[y+1];
				g[y+1] = t1;//?????????
			}
		}
	if(f[0] == 1)
		cout << "NO" << endl;//?????1???NO
	else
	{
		cout << f[0] << endl;
		for(int y=0; y<=n-1; y++)
			cout << a[g[0]++];
		cout << endl;
		for(int s=1; s<=nlen-n; s++)
		{
			if(f[s] == f[0])
			{	
				for(int y=0; y<=n-1; y++)
					cout << a[g[s]++];
				cout << endl;
			}
			else
				break;
		}
	}
	return 0;
}
void main()
{
	char a[1000][10],b[500],*p;
	int n,num[1000];
	int i,j,len,wei,q;
	scanf("%d %s",&n,b);
	len=strlen(b);
	p=b;
	for(i=0;i<100;i++)
	{	
		num[i]=1;
	}
	for(i=0;i<len-n+1;i++)
	{
		wei=i;
		strncpy(a[i],p+wei,n);
		a[i][n]='\0';
	}
	for(i=0;i<len-n+1;i++)
	{
		if(a[i][0]=='*') continue;
		for(j=i+1;j<len-n+1;j++)
		{
			if(strcmp(a[i],a[j])==0){num[i]++;a[j][0]='*';}
		}
	}
	q=1;
	for(i=0;i<len-n+1;i++)
	{
		if(q<num[i]) q=num[i];
	}
	if(q==1) printf("NO");
	else{
		printf("%d\n",q);
		for(i=0;i<len-n;i++)
		{
			if(num[i]==q) printf("%s\n",a[i]);
		}
	}
}
int main()
{
	char sen[501], gram[500][6];
	int n, temp[500] = {0}, max = 1;
	cin >> n;
	cin.get();
	cin.getline(sen, 501);
	int l = strlen(sen);
	for(int i = 0; i <= l - n; i++)
	{
		for(int j = 0; j < n; j++)
			gram[i][j] = sen[i + j];
		gram[i][n] = '\0';
	}
	for(int i = 0; i < l - n;  i++)
	{
		if(temp[i])
			continue;
		temp[i] ++;
		for(int j = i + 1; j <= l - n; j++)
		{
			if(temp[j])
				continue;
			if(strcmp(gram[i], gram[j]))
				continue;
			temp[i] ++;
			temp[j] ++;
		}
		if(temp[i] > max)
			max = temp[i];
	}
	if(max == 1)
		cout << "NO" << endl;
	else
	{
		cout << max << endl;
		for(int i = 0; i <= l - n; i++)
			if(temp[i] == max)
				cout << gram[i] << endl;
	}
	return 0;
}