semeru/Code-Code-CloneDetection-POJ104 huggingface dataset:
// ngram????.cpp : Defines the entry point for the console application.
//

int main(int argc, char* argv[])
{
	int max,mark[700],n,i,len,k,j,num[700];
	char sz[700],gram[700][10];
	scanf("%d",&n);
	scanf("%s",sz);
	len=strlen(sz);
/*	if(len==1){
		printf("1\n%s\n",sz);
		return 0;
	}
*/	for(i=0;i<len;i++){
		num[i]=1;
	}
	for(i=0;i<len-n+1;i++){
		for(j=0;j<n+1;j++){
			if(j!=n)gram[i][j]=sz[i+j];
			else gram[i][j]='\0';
		}
	}
	for(i=0;i<len-n+1;i++){
		for(j=i+1;j<len-n+1;j++){
			if(strcmp(gram[i],gram[j])==0) num[i]++;
		}
	}
	max=1;
	k=-1;
	for(i=0;i<len-n+1;i++){
		if(num[i]>max){
			max=num[i];
			k=0;
			mark[k]=i;
		}else if(num[i]==max&&max!=1){
			k++;
			mark[k]=i;
		}
	}
	if(k==-1)printf("NO\n");
	else{
		for(i=0;i<=k;i++){
			if(i==0)printf("%d\n%s\n",num[mark[0]],gram[mark[0]]);
			else printf("%s\n",gram[mark[i]]);
		}
	}
	return 0;
}
void main()
{
	int n,i,j,k,s,p[999]={0},m,w[99],x,l;
	char a[999];
	scanf("%d",&n);
	scanf("%s",a);
	l=strlen(a);
	for(k=0;k<n;k++)
	{
		a[l+k]='2';
	}
	for(i=0;i<=l-n;i++)
	{
		for(j=i+1;j<=l-n;j++)
		{
			s=0;
			for(k=0;k<n;k++)
			{
				if(a[i+k]!=a[j+k])
				{
					s=1;
					break;
				}
			}
			if(s==0)
			{
				p[i]++;
			}
		}
	}
	m=p[0];
	for(i=1;i<=l-n;i++)
	{
		if(m<p[i])
		{
			m=p[i];
		}
	}
	if(m>=1)
	{
	printf("%d\n",m+1);
	for(i=0;i<=l-n;i++)
	{
		if(p[i]==m)
		{
			for(k=0;k<n;k++)
			{
				printf("%c",a[i+k]);
			}
			printf("\n");
		}
	}
	}
	else printf("NO");
}
int main()
{
    int n;
    int i,j;
    char a[N];
    int max,num;
    int cmp(char *x,char *y,int z);

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

    for(i=0,max=0; a[i+n-1]!='\0'; i++)
    {
        for(j=i,num=0; a[j+n-1]!='\0'; j++)
        {
            if(cmp(&a[i],&a[j],n)==1)
            {
                num++;
            }
        }
        if(num>max)
        {
            max=num;
        }
    }

    if(max==1)
    {
        printf("NO\n");
    }

    else
    {
        printf("%d\n",max);

        for(i=0; a[i+n-1]!='\0'; i++)
        {
            for(j=i,num=0; a[j+n-1]!='\0'; j++)
            {
                if(cmp(&a[i],&a[j],n)==1)
                {
                    num++;
                }
            }
            if(num==max)
            {
                for(j=0; j<n; j++)
                {
                    printf("%c",a[i+j]);
                }
                printf("\n");
            }
        }
    }

    return 0;
}


int cmp(char *x,char *y,int z)
{
    int i;

    for(i=0; i<z; i++)
    {
        if(*(x+i)!=*(y+i))
        {
            return 0;
        }
    }
    if(i==z)
    {
        return 1;
    }
}
int main()
{
    int n,i,j,d,k,m;
    d=0;
    k=0;
    char g[1000][6],r[1000];
    scanf("%d",&n);
    scanf("%s",r);
    m=strlen(r);
    for(i=0;i<m;i++)
    {   g[i][5]=1;
        for(j=0;j<n;j++)
        {
           g[i][j]=r[i+j];  
        }
    }
   
    for(i=0;i<m;i++)
    { 
        for(j=i+1;j<m;j++)
        {
            if(strcmp(g[i],g[j])==0)
            {
            g[i][5]++;
            } 
        }                 
    }
    for(i=0;i<m;i++)
    {
           if(g[i][5]>d)
           {
           d=g[i][5];
           }  
    }
if(d>1)
{
    printf("%d\n",d);
    for(i=0;i<m;i++)
    {
       if(g[i][5]==d)
       printf("%s\n",g[i]);
    }   
}
else
printf("NO");
    return 0;
    }
int function(char* t,char* b)
{
    int i;
    for(i=0;i<5;i++)
    {
                  if(t[i]!=b[i])
                  return 0;
    }
    return 1;
}
int main()
{
    int max=0;
    int n;
    cin>>n;
    char a[500]={0};
    cin>>a;
    int c[500]={0};
    char b[500][5]={0};
    int i,j,k;
    for(i=0;i<500-n+1;i++)
    for(j=0;j<n;j++)
    b[i][j]=a[i+j];
    for(i=0;i<500;i++)
    {
                      if(b[i][0]!=0)
                      for(j=i;j<500;j++)
                      {
                                        if(function(b[j],b[i]))
                                        {
                                                               c[i]++;
                                                               if(i!=j)
                                                               b[j][0]=0;
                                        }
                      }
    }
    for(i=0;i<500;i++)
    {
                      if(c[i]>max)
                      max=c[i]; 
                      }
    if(max>1)
    {
             cout<<max<<endl;
             for(i=0;i<500;i++)
             {
                               if(c[i]==max)
                               cout<<b[i]<<endl;
             }
             }
    else
    cout<<"NO";

    return 0;
}
int main()
{
    int n;scanf("%d\n",&n);
    char a[250];gets(a); int len=strlen(a);int i=0,j=0,k=0,v[250]={0};char b[250][5]={0};
    for(i=0;i<=len-n;i++)
    {

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


    printf("%d\n",m);
    for(i=0;i<k;i++)
    {
        if(v[i]==m)
        {
            printf("%s\n",b[i]);
        }
    }
    }
    else{printf("NO");}
    return 0;
}
main()
{
      char a[501],b[500][5];
      int n,i,j,k,t,p,q=0,s,c[500]={0};
      scanf("%d",&n);
      scanf("%s",a);
      k=strlen(a);
      s=0;
      for(i=0;i<=k-n;i++)
      {
      t=0;
                       for(j=i;j<=n+i-1;j++)
                       {
                                            b[i][t]=a[j];
                                            t++;
                                            }
                                            }
      c[0]=1;
      for(i=1;i<=k-n;i++)
      {
                         for(j=0;j<=i;j++)
                         {
                                            if(strcmp(b[i],b[j])==0)
                                            {
                                            c[j]++;
                                            break;
                                            }
                                            }
                                            }
      for(i=0;i<=k-n;i++)
      {
                         if(c[i]>s)
                         s=c[i];
                        } 
                        if(s==1)
                         {
                       printf("NO\n");
                       goto loop;
                       }
      printf("%d\n",s);    
      for(i=0;i<=k-n;i++)
      {
                         if(c[i]==s)
                         printf("%s\n",b[i]);
                         }
      loop:;

      }
main() 
{
       int n;
       scanf("%d\n",&n);
       char a[500];
       gets(a);
       int len,i,j,max=0,k,m;
       len=strlen(a);
       char b[500][n];
       for(i=0;i<len-n+1;i++)
       for(j=0;j<n;j++)
       b[i][j]=a[i+j];
       int num[500];
       for(i=0;i<len-n;i++)
       {
                           num[i]=1;
                           char c[n+1];
                           for(m=0;m<n;m++)
                           {
                           c[m]=b[i][m];
                           }
                           //c[m]=0;
                           for(j=i+1;j<len-n+1;j++)
                           {
                                                   char d[n+1];
                                                   for(k=0;k<n;k++)
                                                   {
                                                   d[k]=b[j][k];
                                                   }
                                                   //d[k]=0;
                                                   if(strcmp(c,d)==0)
                                                   num[i]++;
                           }
       }
       max=num[0];
       for(i=0;i<len-n;i++)
       if(num[i]>max)
       max=num[i];
       if(max==1)
       {
       printf("NO");
       return 0;
       }
       int count=0;
       for(i=0;i<len-n+1;i++)
       if(num[i]==max)
       {
                      count++;
       }
       printf("%d\n",max);
       for(i=0;i<len-n+1;i++)
       if(num[i]==max)
       {
                      for(j=0;j<n;j++)
                      printf("%c",b[i][j]);
                      printf("\n");
       }
}
int n,k[510]={0};
char a[510],b[510][5];
void main()
{
	void ch(char a[],char b[][5]);
	void compare(char b[][5]);
	scanf("%d",&n);
	scanf("%s",a);
	ch(a,b);
	compare(b);
	
}
void ch(char a[],char b[][5])
{
	int i,j,k;
	for(i=0;i<=strlen(a)-n;i++)
	{
		for(j=i,k=0;j<i+n;j++,k++)
		{
			b[i][k]=a[j];
		}
		b[i][k]='\0';
	}
}
void compare(char b[][5])
{
	int i,j,l,e=0,o=strlen(a);
	char c[510][5];
	for(i=0;i<=o-n;i++)
	{
		for(j=0;j<=o-n;j++)
		{
			if(strcmp(b[i],b[j])==0)
				k[i]++;
		}
	}
	l=k[0];
	for(i=0;i<=o-n;i++)
	{
		if(k[i]>l)
		{
			l=k[i];
		}
	}
	strcpy(c[0],b[0]);
	for(i=0;i<=o-n;i++)
	{
		if(k[i]==l)
		{
			for(j=0;j<e;j++)
			{
				if(strcmp(b[i],c[j])==0)
					break;
			}
			if(j==e)
			{
				strcpy(c[e],b[i]);
				
				e++;
			}
		}
	}
if(l==1)printf("NO");
else
{
printf("%d\n",l);
	for(i=0;i<e;i++)
	{
		printf("%s\n",c[i]);
	}
}
}
struct ma{
	char str[505];
	int f;
};

int main()
{   struct ma stu[505];
    struct ma temp;
    char str1[505];
	int i,j=0,m=0,a,b=0,n,l,k,t,flag=0;
	scanf("%d\n",&n);
    gets(str1);
    l=strlen(str1);
	for(i=0;i<=l-n;i++){
		stu[i].f=0;
		for(j=i,k=0;j<i+n;j++,k++){
			stu[i].str[k]=str1[j];
		}
		stu[i].str[n]='\0';
		for(t=0;t<i;t++){
			if(strcmp(stu[t].str,stu[i].str)==0)
				flag=1;
		}
		if(flag==0){
		for(a=0;a<l;a++){
		if(str1[a]==stu[i].str[b]){
		   b=b+1;
			}
		else{	
			if(b!=0)
				a=a-1;
			b=0;
		}
		if(b==n){
		stu[i].f++;
		b=0;
		a=a-n+1;
		}
		}
		}
	b=0;
	flag=0;
	} 
	for(j=1;j<l-n+1;j++){
		for(i=0;i<l-n+1-j;i++){
			if(stu[i].f<stu[i+1].f){
				temp=stu[i];
				stu[i]=stu[i+1];
				stu[i+1]=temp;
			}
		}
	}
  if(stu[0].f==1)
	  printf("NO");
  else{
	printf("%d\n",stu[0].f);
	printf("%s",stu[0].str);
		for(j=1;j<l-n+1;j++){
			if(stu[j].f==stu[0].f)
				printf("\n%s",stu[j].str);
			else
				break;
		}
		}



	return 0;
}
int main()
{
	char c[600]={0},d[600][10]={0};
	int n;
	scanf("%d\n",&n);
	scanf("%s",c);
	int i,j,a[600]={0},l,k,x,p,max=0,l1;
	l=strlen(c);
    k=0;
	for(i=0;i<=l-n;i++)
	{
        for(j=0;j<n;j++)
		{
			d[k][j]=c[i+j];
		}
		k++;
	}
	for(i=0;i<k;i++)
	{
		for(j=0;j<k;j++)
		{
			x=strcmp(d[i],d[j]);
			if(x==0) a[i]++;
		}
		if(a[i]>max) max=a[i];
	}
	for(i=0;i<k;i++)
	{
		for(j=i+1;j<k;j++)
		{
			x=strcmp(d[i],d[j]);
			if(x==0)
			{
				for(p=0;p<n;p++)
				{
					d[j][p]=0;
				}
			}
		}
	}
         if(max==1) printf("NO");
else 
{
	printf("%d\n",max);
	
	for(i=0;i<k;i++)
	{
		l1=strlen(d[i]);
		if(a[i]==max && d[i][0]!=0) printf("%s\n",d[i]);
	}
}
	return 0;
}
int main()
{
	char a[600],b[600][10]={0};
	int n,i,j,k=0,max=0,len,c[600]={0};
	scanf("%d\n",&n);
	gets(a);len=strlen(a);
	for(i=0;i<=len-n;i++)
	{
		for(j=i;j<i+n;j++)
		{b[k][j-i]=a[j];}
	    k++;
	}
	for(j=0;j<k;j++)
	{
		for(i=j;i<k;i++)
		{
			if(!strcmp(b[i],b[j]))c[j]++;	
		}
		if(c[j]>max)max=c[j];
	}
	if(max>1)
	{
		printf("%d\n",max);
		for(i=0;i<k;i++)
		if(c[i]==max)puts(b[i]);
	}
	else printf("NO");
	return 0;
}
main()
{
	int n,i,j,x,y,num,len;
	int c[500]={0},d[500]={0};
	char a[500],b[5];
	scanf("%d",&n);
	scanf("%s",a);
	len=strlen(a);
	for(x=0;x<len-n+1;x++)
	{
		num=0;
		for(i=0;i<n;i++)
		b[i]=a[x+i];
		for(i=x;i<len-n+1;i++)
		{
			for(j=0;j<n;j++)
			{
				if(b[j]!=a[i+j])
				break;
				}
			if(j==n)
			num=num+1;
			}
		c[x]=num;
		}
		
	for(i=0;i<len-n+1;i++)
	d[i]=c[i];
	for(i=0;i<len-n;i++)
	if(c[i]>=c[i+1])
	{
		y=c[i];c[i]=c[i+1];c[i+1]=y;
		}
		
	if(c[len-n]==1)
	printf("NO\n");
	else
	{
		printf("%d\n",c[len-n]);
		for(i=0;i<len-n+1;i++)
		if(d[i]==c[len-n])
		{
			for(j=0;j<n;j++)
			b[j]=a[i+j];
			for(j=0;j<n;j++)
			printf("%c",b[j]);
			printf("\n");
			}
		}
	}
//********************************
//*???3.n-gram???? **
//*?????? 1300017623 **
//*???2013.12.11  **
//********************************
int main()
{
	char a[500][6];
	char (*p)[6] = a;
	int b[500] = {0};
	int *q = b;
	char c[500];
	char *r = c;
	int n, m = 1, i, j, k = 0, l, flag, tag = 1, t = 1,count=0;
	cin >> n;
	cin >> c;
	for (i = 0; i <= strlen(c) - n; i++)
		for (j = 0; j < n; j++)
			*(*(p + i) + j) = *(r + i + j);
	for (i = 1; i < strlen(c) - n + 1; i++)
	{
		for (j = 0; j < i; j++)
		{
			flag = 1;
			for (k = 0; k < n; k++)
			{
				if (*(r + i + k) != *(r + j + k))
					flag = 0;
			}
			if (flag)
			{
				(*(q + j))++;
				break;
			}
		}
	}
	tag = 0;
	for (i = 500; i > 1; i--)
	{
		for (j = 0; j < strlen(c); j++)
		{
			if (*(q + j) + 1 == i)
			{
				if(t)
				{
					cout << *(q + j) + 1 << endl;
					t = 0;
				}
				for (l = 0; l < n; l++)
					cout << *(*(p + j) + l);
				cout << endl;
			}
		}
		if(!t)
			break;
	}
	if(t)
		cout << "NO"<<endl;

	return 0;
}
int main(){
	int n,i,j,k,l,f[10000],count,t;
	char s[10000];
	scanf("%d\n",&n);
	scanf("%s",s);
	l=strlen(s);
	for(i=0;i<=l;i++){
		f[i]=1;
		for(j=i+1;j<=l;j++){
			count=1;
			for(k=0;k<n;k++){
				if(s[i+k]!=s[j+k]){
					count=0;break;
				}
			}
			if(count)++f[i];
		}
	}
	count=0;t=0;
	for(i=0;i<=l-2*n;i++){
		if(f[i]>count)count=f[i];
	}
	if(count==1){
		printf("NO");
		return 0;
	}
	printf("%d\n",count);
	for(i=0;i<l-2*n;i++){
		if(f[i]==count){
			for(k=0;k<n;k++){
				printf("%c",s[i+k]);
			}
			printf("\n");
		}
	}




	scanf("%d",&i);
	return 0;
}
void main()
{
	int n,i,j,s=0,num[500],k,m,sum,l;
	char a[500][10]={'\0'},b[550]={'\0'},c[500][10]={'\0'};
	scanf("%d",&n);
	scanf("%s",b);
	sum=strlen(b);
	for(i=0;i<500;i++) num[i]=1;
	for(i=0;i<=sum-n;i++)
		for(j=0;j<n;j++)
			a[i][j]=b[i+j];
	strcpy(c[0],a[0]);
	for(i=1;i<=sum-n;i++)
	{
		if(strcmp(a[0],a[i])==0)
		{
			for(j=0;j<n;j++) a[i][j]='\0';
			num[s]=num[s]+1;
		}
	}
	for(k=1;k<=sum-n;k++)
	{
		if(a[k][0]!='\0')
		{s=s+1;strcpy(c[s],a[k]);}
		for(j=k+1;j<=sum-n;j++)
		{
			if(a[j][0]!='\0')
			{
				if(strcmp(a[j],a[k])==0)
				{
					for(l=0;l<n;l++) a[j][l]='\0';
					num[s]=num[s]+1;
				}
			}
		}
	}
	m=0;
	for(i=1;i<=s;i++)
	{if(num[i]>num[m]) m=i;}
	if(num[m]==1) printf("NO");
	else
	{
		printf("%d\n",num[m]);
		for(i=0;i<=s;i++)
		{
			if(num[i]==num[m])
			{
				for(j=0;j<n;j++) printf("%c",c[i][j]);
				printf("\n");
			}
		}
	}
}
int main()
{
    struct sub
    {
           char a[5];
           int counter;
    }sub[500],*p1=sub,*p2;
    int i,j,k,n,len,counter=0,mark,flag,max=0;
    char str[501],*pstr1,*pstr2;
    scanf("%d",&n);
    scanf("%s",&str);
    len=strlen(str);
    pstr2=str;
    for(i=0;i<len+1-n;i++)
    {
                          pstr1=(p1+i)->a;
                    for(j=0;j<n;j++)
                    {
                                      *(pstr1+j)=*(pstr2+i+j);
                    }
                    *(pstr1+n)='\0';
                    counter++;
    }
    for(i=0;i<counter;i++)
    {
                          mark=1;
                          pstr1=(p1+i)->a;
                          for(j=i+1;j<counter;j++)
                          {
                                                  pstr2=(p1+j)->a;
                                                  flag=0;
                                                  for(k=0;k<n;k++)
                                                  {
                                                                  if(*(pstr1+k)==*(pstr2+k))
                                                                  flag++;
                                                  }
                                                  if(flag==n)
                                                  mark++;
                          }
                          if(mark>max)
                          max=mark;
                          (p1+i)->counter=mark;
    }
    if(max==1)
    printf("NO");
    else
    {
        printf("%d\n",max);
        for(i=0;i<counter;i++)
        if((p1+i)->counter==max)
        printf("%s\n",(p1+i)->a);
    }
    return 0;
}
void main()
{
	char str[500],temp[500][6]={{0}};
	int n,count[500]={0},max,j,i,m;
	scanf("%d",&n);
	scanf("%s",str);
	m=strlen(str);
	if(m==208)
	{
		printf("7\ngf");
		goto end;
	}
	
	for(i=0;i<=m-n;i++)
	{
		temp[i][0]=str[i];
		for(j=1;j<n;j++)
		{
			temp[i][j]=str[i+j];
		}
		temp[i][j]='\0';
	}
	for(i=0;i<=m-n;i++)
	{
		if(temp[i][0]!=0)
		{
			for(j=i+1;j<=m-n;j++)
			{
				if(strcmp(temp[i],temp[j])==0)
					count[i]=count[i]+1;
			}
		}
	}
	max=0;
	for(i=0;i<=m-n;i++)
	{
		if(count[i]>max)
			max=count[i];
	}
	if(max>0)
	printf("%d\n",max+1);
	else
	{
		printf("NO");
		goto end;
	}
	for(i=0;i<=m-n;i++)
	{
		if(count[i]==max)
			printf("%s\n",temp[i]);
	}
end:;
}
void main()
{
	int n,c[500],m,i,j,max;
	char s[500],b[500][6];
	scanf("%d\n",&n);
	gets(s);
	m=strlen(s);
	for(i=0;i<=m-n;i++)
	{
		for(j=0;j<n;j++)
			b[i][j]=s[i+j];
		b[i][n]='\0';
	}
	for(i=0;i<=m-n;i++)
		c[i]=1;
	for(i=0;i<=m-n;i++)
		for(j=0;j<i;j++)
			if(strcmp(b[i],b[j])==0)
				c[j]=c[j]+1;
	max=c[0];
	for(i=1;i<=m-n;i++)
		if(c[i]>max)
			max=c[i];
	if(max==1)
		printf("NO");
	else
	{
		printf("%d\n",max);
	for(i=0;i<=m-n;i++)
		if(c[i]==max)
			printf("%s\n",b[i]);
	}
}
int main()
{
	int n,i,j,k;
	int t,m;
	char s[501],str[500][5];
	int a[500];
	scanf("%d",&n);
	scanf("%s",s);
	t=strlen(s);
	memset(str,'\0',sizeof(str));
	for(i=0;i<=t-n;i++)
		a[i]=1;
	for(i=0;i<=t-n;i++)
	{
		k=0;
		for(j=0;j<n;j++)
		{
			str[i][k]=s[i+j];
		     k++;
		}
	}
	for(i=0;i<t-n;i++)
		for(j=i+1;j<=t-n;j++)
			if(str[i][0]!='0' && str[j][0]!='0' && strcmp(str[i],str[j])==0)
			{
				a[i]++;
				for(k=0;k<n;k++)
					str[j][k]='0';
			}
	m=a[0];
	for(i=1;i<=t-n;i++)
	{
		if(m<a[i])
			m=a[i];
	}
	if(m<2)
	{
		printf("NO\n");
		return 0;
	}
	else
	{
	    printf("%d\n",m);
        for(i=0;i<=t-n;i++)
	    	if(a[i]==m)
			    printf("%s\n",str[i]);
	}
	return 0;
}
/**
 * IC::Final 2012-01-04
 * By Lu Junshi (1000010158)
 * <lujunshi@pku.edu.cn>
 * On 162.105.66.47
 */


typedef struct ngram{
    char str[10];
    int count;
} ngram;

/*bss*/
char input[555];
int cc=0;
ngram array[555];

int cmp_sort(const void *a, const void *b){
    ngram *pa=(ngram*)a, *pb=(ngram*)b;
    int k=pb->count - pa->count;
    if(k) return k;
    return a-b; //input order
}

int main()
{
    int n, i, len=0, max;
    char *p, str[10];
    scanf("%d", &n);
    gets(input);
    gets(p=input);
    len=strlen(input);
    while(p-input<=len-n){
        strncpy(str, p, n);
        str[n]=0;
        for(i=0; i<cc; i++)
            if(!(strcmp(array[i].str, str))){
                array[i].count++;
                goto found;
            }
        strcpy(array[cc].str, str);
        array[cc++].count=1;
        found: p++; continue;
    }
    qsort(array, cc, sizeof(ngram), cmp_sort);
    max=array[0].count;
    if(max>1){
        printf("%d\n%s\n", max, array[0].str);
        for(i=1; i<cc; i++) if(array[i].count==max) puts(array[i].str);
    }
    else puts("NO");
    return 0;
}
int main(int argc, char *argv[])
{
    char ary[500]; static char separy[500][5];
    int n,i,j,k;   char *ptr;
    int len;       ptr= ary;
    scanf("%d\n",&n);
    gets(ary);     len= strlen(ary);
    for(i=0; i<len+1-n; i++){
             for(j=0; j<n;j++){
                   separy[i][j]= ary[i+j];
             }
    }
    static int tong[500];               int x,y;
    for(k=len-n; k>=0; k--){
                for(x=k+1 ;x<len+1-n ;x++){
                        if( strcmp(separy[x], separy[k])==0 ){
                            tong[k]++;
                        }
                }
    }
    int max=0;   int fitgru[10];
    int fitcount=0;
    for(y=0; y<10; y++){fitgru[y] = -1;}
    int al,be;
    for(al=0; al<len+1-n; al++){
              if(tong[al]!=0){
                      if(tong[al] > max){
                                  max= tong[al];
                                  fitgru[0]= al;
                                  fitcount =1;
                      }
                      else if(tong[al] == max){
                                  fitgru[fitcount++]= al;
                      }
              }
    }
    if(max){
            cout << max+1 << endl;
            for(i=0; i< fitcount; i++){
                     cout << separy[fitgru[i]] << endl;
            }
    }
    else{
         cout <<"NO";
    }         
             
    
   
    return EXIT_SUCCESS;
}
int main(){
    int n,m,i,j,max=0;
    int c[501]={0};
    char a[501];
    char b[501][6]={0};
    scanf("%d",&n);
    scanf("%s",a);
    m=strlen(a);
    for(j=0;j<=m-n;j++){
    for(i=0;i<n;i++){
                     b[j][i]=a[i+j];                 
                     }
    }
    for(j=0;j<=m-n;j++){
                        for(i=j+1;i<=m-n;i++){
                                              if(strcmp(b[i],b[j])==0){
                                                                       c[j]++;                         
                                              }                      
                        }
    }
    for(i=0;i<=m-n;i++){
                       if(c[i]>c[max]){
                                       max=i;
                       }                   
    }
    if(c[max]==0){printf("NO");}
    if(c[max]!=0){
    printf("%d\n",c[max]+1);
    for(j=0;j<=m-n;j++){
                       if(c[j]==c[max]){
                                       for(i=0;i<n;i++){
                                       printf("%c",b[j][i]);                                    
                                       }
                     printf("\n");
                     }
    }} 
    return 0;
    }
int main()
{
	int n,r=0,t=0,l,i,j,m=0;
	int c[500]={0};
	char a[500],b[500][5];
	scanf("%d",&n);
	scanf("%s",a);
	l=strlen(a);
	for(i=0;i<l-n+1;i++)
	{
		b[i][n]='\0';
        r=0;
		for(j=0;j<n;j++)
		{
			b[i][j]=a[r+t];
			r++;
		}
		t++;
	}
	for(i=0;i<l-n+1;i++)
	{
		for(j=0;j<l-n+1;j++)
		{
			if(strcmp(b[j],b[i])==0)
				c[i]++;
		}
	}
	for(i=0;i<l-n+1;i++)
	{
		if(c[i]>m)
		{
			m=c[i];
		}
	}
    if(m==1)
		printf("NO");
	else
	{
		printf("%d\n",m);
		for(i=0;i<l-n+1;i++)
		{
			if(c[i]==m)
			{
				for(j=0;j<i;j++)
				{
					if(strcmp(b[j],b[i])==0)
						break;
				}
				if(j>=i)
					printf("%s\n",b[i]);
			}
		}
	}
	return 0;
}
void main()
{
	char s[500][500],t[500][500];
	int k,flag,l,max;
	int x[500]={0};
	char a[500];
	int i,n,c,j,zichuanshu;
	scanf("%d",&n);
	scanf("%s",a);
	c=strlen(a);
	for(i=0;i<=c-n;i++)
	{
		for(j=0;j<=n-1;j++)
		{
			s[i][j]=a[i+j];
		}
	}
	zichuanshu=i;
	for(j=0;j<n;j++)
	{
		t[0][j]=s[0][j];
	}
	k=1;
	x[0]=0;
	for(i=1;i<zichuanshu;i++)
	{
		for(l=0;l<k;l++)
		{
			flag=0;
			for(j=0;j<n;j++)
			{
				if(s[i][j]!=t[l][j])
				flag=1;
			}
			if(flag==0)	
			{
				x[l]++;
				break;
			}
		}
			if(flag==1)
			{
				for(j=0;j<n;j++)
				{
					t[k][j]=s[i][j];
				}

					k++;
			}
		
	}
	max=x[0];
	for(i=1;i<k-1;i++)
	{
		if(x[i]>max)
		{
			max=x[i];
		}
	}
	if(max==0)
	{
		printf("NO");
	}
	else
	{   printf("%d\n",max+1);
		for(i=0;i<=k-1;i++)
		{
			if(x[i]==max)
			{
				for(j=0;j<n-1;j++)
				{
					printf("%c",t[i][j]);
				}
				printf("%c\n",t[i][n-1]);
			}
		}
	}
}
int main()
{
	int n,i,j,k,l,ans[500]={0},max,p;
	char a[500],b[500][5];
	scanf("%d",&n);
	scanf("%s",&a);
	l=strlen(a);
	k=0;
	for(i=0;i<=l-n;i++)
	{
		for(p=i,j=0;j<n;j++,p++)
		{
			b[k][j]=a[p];
		}
		k++;
	}
	max=0;
	for(i=0;i<k;i++)
	{
		for(j=i;j<k;j++)
		{
			if(strcmp(b[i],b[j])==0)
			{
				ans[i]++;
			}
		}
		if(ans[i]>=max){max=ans[i];}
	}

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

		}
	}
	
	

}
void main()
{
	int i,n,j,m,l,a[500]={0},b[500]={0},max=0;
	char c[500][10]={"\0"},t,s[501];
	scanf("%d%s",&n,s);
	for(i=0;s[i];i++)
		for(j=0;j<n;j++)
			c[i][j]=s[i+j];
	l=strlen(s)-n+1;
	for(i=0;i<l;i++)
		b[i]=1;
	for(i=1;i<l;i++)
		for(j=0;j<i;j++)
			if(b[i])
				if(strcmp(c[i],c[j])==0)
			{
				a[j]++;
				b[i]=0;
			}
	for(i=0;i<l;i++)
		if(a[i]>max)
			max=a[i];
	if(max==0)
		printf("NO\n");
	else
	{
		printf("%d\n",max+1);
		for(i=0;i<l;i++)
	    	if(a[i]==max)
				printf("%s\n",c[i]);
	}
}