semeru/Code-Code-CloneDetection-POJ104 huggingface dataset:
int main()
{
	char a[502];
	char b[502][6];
	int d[502]={0};
	int n,c,e,i,j;
	scanf("%d\n",&n);
	gets(a);
	c=(int)strlen(a);
	for(i=0;i<=c-n;i++)
	{
		for(j=0;j<n;j++)
		{
			b[i][j]=a[i+j];
		}
	}
	for(i=0;i<502;i++)
	{
		b[i][n]='\0';
	}
	for(i=0;i<=c-n;i++)
	{
		for(j=i;j<=c-n;j++)
		{
			if((int)strcmp(b[i],b[j])==0)
			{
				d[i]++;
			}
		}
		
	}
	e=0;
	for(i=0;i<=c-n;i++)
	{
		if(d[i]>e)
		{
			e=d[i];
		}
	}
	if(e==1)
	{
		printf("NO");
	}
	else
	{
		printf("%d\n",e);
	for(i=0;i<=c-n;i++)
	{
		if(d[i]==e)
		{
			for(j=0;j<n;j++)
			{
				printf("%c",b[i][j]);
			}
			printf("\n");
		}
	}
	}
	return 0;
}
int main()
{
 char ori[500], a[500][6];
 int num[500] = {0}, i, n, j, count = 0;
 scanf("%d", &n);
 scanf("%s", ori);
 int l = strlen(ori);
 for(i = 0; i < l - n + 1; i++)
 {
  char tmp[6];
  for(j = 0; j < n; j++)
  {
   tmp[j] = ori[i + j];
  }
  tmp[j] = '\0';
  int found = 0;
  for(j = 0; j < count; j++)
  {
   if(strcmp(a[j], tmp) == 0)
   {
    found = 1;
    num[j]++;
    break;
   }
  }
  if(found == 0)
  {
   for(j = 0; j <= n; j++)
   {
    a[count][j] = tmp[j];
   }
   num[count]++;
   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", a[i]);
 }

 return 0;
}
main()
{
    int n,len,stre[1000],y,max=1;
    char str[1000][1000],stra[1000];
    scanf("%d%s",&n,stra);
    len=strlen(stra);
    for (int i=0;i<=len-n;i++)
    {
        for (int j=0;j<n;j++)
            str[i][j]=stra[i+j];
    }
    //?????~
    memset(stre, 0, sizeof(stre));
    for (int i=0;i<len-n;i++)
        for (int j=i;j<=len-n;j++)
        {
            y=strcmp(str[i],str[j]);
            if(y == 0)
                stre[i]++;
        }
    for(int i=0;i<len-n;i++)
    {
        if(stre[i]>max)
            max=stre[i];
    }
    if (max==1)
        printf("NO");
    else
    {
        printf("%d\n",max);
        for(int i=0;i<len-n;i++)
        {
            if (stre[i]==max)
            {
                for(int j=0;j<n;j++)
                    printf("%c",str[i][j]);
                printf("\n");
                
            }
            
            
        }
    }
}
int main()
{
	int maxflag,max,flag[500];
	char ch[500][500],str[500];
	int i,j,l,n;
	for(i=0;i<500;i++)
		flag[i]=1;
	scanf("%d",&n);
	getchar();
	gets(str);
	l=strlen(str);
	for(i=0;i<=l-n;i++)
	{
		for(j=i;j<i+n;j++)
		{
			ch[i][j-i]=str[j];
		}
	}
	maxflag=0;
	int count[500];
	for(i=0;i<=l-n;i++)
	{
		count[i]=0;
		if(flag[i]!=0)
		{
			for(j=0;j<=l-n;j++)
			{
				if(strcmp(ch[i],ch[j])==0&&i!=j)
				{
					count[i]++;
					flag[j]=0;
				}
			}
		}
		count[i]++;
		if(count[i]>maxflag)
		{
			maxflag=count[i];
		}
	}
	if(maxflag!=1)
	{
		printf("%d\n",maxflag);
		for(i=0;i<=l-n;i++)
		{
			if(count[i]==maxflag&&flag[i]!=0)
				printf("%s\n",ch[i]);
		}
	}
	else printf("NO");
}
//3.cpp n-gram????
//?? 1300013016
char b[505][505];
int main()
{
	int n, t = 0, s[505] = { 0 }, num;
	cin >> n;//????
	char a[505];
	cin >> a;//?????
	int len = strlen(a);//????????
	for (int i = 0; i <= len - n; i++)
	{
		char *p = &a[i];
		while (t < n)
		{
			b[i][t++] = *(p++);
		}
		b[i][t] = '\0';
		t = 0;
		num = i;
	}
	for (int i = 0; i <= num; i++)
	{
		for (int j = i + 1; j <= num; j++)
		{
			if (strlen(b[j]) == n)
			{
				if (strcmp(b[i], b[j]) == 0)
				{
					s[i]++;
					b[j][n] = ' ';
				}
			}
		}
	}
	int max = 0;
	for (int i = 0; i <= num; i++)
	{
		if (max < s[i])
		{
			max = s[i];
		}
	}
	if (max == 0)
		cout << "NO" << endl;
	else
	{
		cout << max + 1 << endl;
		for (int i = 0; i <= num; i++)
		{
			if (s[i] == max)
			{
				cout << b[i] << endl;
			}
		}
	}
	return 0;
}
int com(char str1[],char str2[])
{
	int i,n,l=strlen(str1);
	for(i=0;i<l;i++)
		if(str1[i]!=str2[i])return 0;
    return 1;
}
void main()
{
	int i,j,n,l,k=1,nu[800]={0},m=1,max=0;
	char x[800],p[800][7],tmp[7];
	scanf("%d",&n);
    scanf("%s",x);
	l=strlen(x);
	for(i=0;i<n;i++)
		p[0][i]=x[i];
     nu[0]++;
	for(i=1;i<l-n+1;i++)
	{
		for(j=0;j<n;j++)
			tmp[j]=x[i+j];
		for(j=0;j<k;j++)
			if(com(tmp,p[j])){nu[j]++;m=0;break;}
		if(m==1){strcpy(p[j],tmp);k++;nu[j]++;}
		m=1;
	}
	for(i=0;i<k;i++)
		if(nu[i]>max)max=nu[i];
		if(max==1)printf("NO");
		else
		{printf("%d\n",max);
	for(i=0;i<k;i++)
		if(nu[i]==max)printf("%s\n",p[i]);
		}
}
void main()
{
	int n,i,num[500]={0},max=0,l,j,k;
	char c[501],str[500][6],str2[500][6];
	scanf("%d",&n);
	scanf("%s",c);
	l=strlen(c);
	for(i=0;i<=l-n;i++)
	{
		j=0;
		for(k=i;k<=i+n-1;k++)
		{
			str[i][j]=str2[i][j]=c[k];
			j++;
		}
		str[i][j]=str2[i][j]='\0';
	}
	for(i=0;i<=l-n;i++)
	{
		if(str[i][0]!='\0')
		{
			for(k=i;k<=l-n;k++)
			{
				if(str[k][0]!='\0')
				{
					if(strcmp(str2[i],str[k])==0)
					{
						num[i]=num[i]+1;
						str[k][0]='\0';
					}
				}
			}
		}
	}
	for(i=0;i<=l-n;i++)
	{
		if(num[i]>max)
		{
			max=num[i];
		}
	}
	if(max<=1)
	{
		printf("NO\n");
	}
	else
	{
		printf("%d\n",max);
		for(i=0;i<=l-n;i++)
		{
			if(num[i]==max)
			{
				printf("%s\n",str2[i]);
			}
		}
	}
}
void main()
{
	int i,k[600]={0},j,l,n,m,d[600]={0},dmax=0;
	char a[600][7],c[600];
    scanf("%d",&n);
	scanf("%s",c);
	m=strlen(c);
	for(i=0;i<=m-n;i++)
	{
		for(j=0;j<n;j++)
		{a[i][j]=c[i+j];}
		a[i][n]='\0';
	}
    for(i=0;i<m-n;i++)
    {for(j=i+1;j<=m-n;j++)
	 if(strcmp(a[i],a[j])==0)
		 d[i]++;
	}
	for(i=0;i<=m-n;i++)
		for(j=0;j<=m-n;j++)
			if(d[i]>=d[j])k[i]++;
    for(i=0;i<=m-n;i++)
	{
		if(k[i]==m-n+1)
		break;
	}
	if(d[i]==0)printf("NO");
	else
	{
		printf("%d\n",d[i]+1);
		for(i=0;i<=m-n;i++)
			if(k[i]==m-n+1)
				printf("%s\n",a[i]);
	
	
	}





}
int main()
{
    int n,b[500]={0},i,j,k,max=0;
    char a[500];
    scanf("%d",&n);
    a[0]=getchar();
    gets(a);
    for(k=0;k<500;k++)
      if(a[k]!='\0')
      for(j=k+1;j<500;j++)
        if(a[j]!='\0')
        {
          for(i=0;i<n;i++)
            if(a[k+i]!=a[j+i]) break;
          if(i==n) b[k]++;
        }
        else break;
      else break;
    for(i=0;i<500;i++)
      if(b[i]>max) max=b[i];
    if(max!=0)
    {
    printf("%d\n",max+1);
    for(i=0;i<500;i++)
      if(b[i]==max)
      {
      for(j=0;j<n;j++)
        printf("%c",a[i+j]);
      printf("\n");
      }
    }
    else printf("NO\n");
    //scanf("%d",&n);
    return 0;
}
int main()
{
	int n,u[600]={0},l,g=0;
	char s[600]={0};
	scanf("%d",&n);
	scanf("%s",s);
	
	int i,j,k=0;
	char a[600][6]={0};
	
	for(i=0;i<strlen(s);i++)
		for(j=0;j<n;j++)
			a[i][j]=s[i+j];

	/*for(i=0;i<strlen(s);i++)
			puts(a[i]);*/
	for(i=0;i<strlen(s)-1;i++)
		for(j=i+1;j<strlen(s);j++)
			if(strcmp(a[i],a[j])==0)
				u[i]++;
	
	for(l=200;l>0;l--)
	{for(i=0;i<strlen(s);i++)
			if(u[i]==l)
			{if(!k)
				{printf("%d\n",l+1);k++;g++;}
			puts(a[i]);}
	if(g)break;}
	if(l==0)
		printf("NO");
}
int main()
{
	char str[510], div[510][5], *p;
	int times[510] = {0}, n, len, *q;
	int i, j, k, max, cnt;
	cin >> n;
	cin.get();
	cin.getline(str, 510);
	len = strlen(str);
	p = str;
	q = times;
	for(i = 0; i < len-n+1; i++)
		for(cnt = 0, k = i; cnt <= n; k++, cnt++)
		{
			if(cnt == n)
				div[i][k-i] = '\0';
			else
				div[i][k-i] = *(p+k);
		}
	for(i = 0; i < len-n+1; i++)
	{
		if(*(q+i) < 0)
			continue;
		*(q+i) += 1;
		for(j = i+1; j < len-n+1; j++)
		{
			if(strcmp(div[i], div[j]) == 0)
			{
				*(q+i) += 1;
				*(q+j) = -1;
			}
		}
	}
	max = 0;
	for(i = 0; i < len-n+1; i++)
		max = (max > *(q+i) ? max : *(q+i));
	if(max <= 1)
		cout << "NO"<< endl;
	else
	{
		cout << max << endl;
		for(i = 0; i < len-n+1; i++)
			if(*(q+i) == max)
				cout << div[i] << endl;
	}
	return 0;
}
int main()
{
    int n,bz,i,j,k,len,m,d,temp;
	char a[505],t[10];
	char b[700][10];
	int c[700]={0};
	scanf("%d",&n);
	scanf("%s",a);
	len=strlen(a);
	d=len-n+1;
	for(i=0;i<d;i++)
	{
		k=i;
		for(j=0;j<n;j++)
		{
			b[i][j]=a[k];
			b[i][n]='\0';
			k++;
		}
	}
	for(i=0;i<d;i++)
	{
		for(k=0;k<i;k++)
		{
			if(strcmp(b[i],b[k])==0) {c[k]++;break;}
		}
	}
	for(i=0;i<d;i++)
	{
		for(j=0;j<d-1;j++)
		{
			if(c[j]<c[j+1])
			{
				temp=c[j];strcpy(t,b[j]);
				c[j]=c[j+1];strcpy(b[j],b[j+1]);
				c[j+1]=temp;strcpy(b[j+1],t);
			}
		}
	}
    
	if(c[0]==0) printf("NO");
	else
	{
		for(i=0;i<d-1;i++)
		{
			if(c[i]!=c[i+1]) {bz=i+1;break;}
		}
        if(i==d-1) bz=d;
		printf("%d\n",c[0]+1);
		for(m=0;m<bz;m++)
		{
			printf("%s\n",b[m]);
		}
	}
	return 0;
}
int main()
{
	int n,m,i,j;
	char str[1000],str1[1000][20];
	scanf("%d",&n);
	scanf("%s",str);
	m=strlen(str);
	int index=0;
	for(i=0;i<(m-n+2);i++)
	{
		for(j=0;j<n;j++)
		{
			str1[i][j]=str[i+j];
		}
		index=i;
	}
	for(i=0;i<index;i++)
		str1[i][n]=0;
	int num[1000]={0},max;
	for(i=0;i<index;i++)
	{
		for(j=i;j<index;j++)
		{
			if(strcmp(str1[i],str1[j])==0)
				num[i]++;
		}
	}
	max=1;
	for(i=0;i<index;i++)
	{
		if(max<=num[i])
		{
			max=num[i];
		}
	}
	if(max==1)
	{
		printf("NO");
	}
	else
	{
		printf("%d\n",max);
	for(i=0;i<index;i++)
	{
		if(max==num[i])
			printf("%s\n",str1[i]);
	}
	}
}
int main ()
{  int n,i,j,m,t,max;
    char mem[1000];
    int num[1000];
    for(i=0;i<1000;i++)
      num[i]=1;
    scanf("%d\n",&n);
    gets(mem);
    m=strlen(mem);
    for(i=0;i<=m-n;i++)
    {   if(num[i]!=0)
        {  for(j=i+1;j<=m-n;j++)
             {  
                for(t=0;t<n;t++)
					if(mem[i+t]!=mem[j+t])  break;
                if(t==n) {num[j]=0;num[i]++;}
              }
          }
    }

   max=1;
   for(i=0;i<=m-n;i++)
      if(num[i]>max) max=num[i];
   if(max==1) {printf("NO\n"); return 0;}
   printf("%d\n",max);
   for(i=0;i<=m-n;i++)
   {   if(num[i]==max) 
      {  for(j=0;j<n;j++)
         printf("%c",mem[i+j]);
         printf("\n");
      }
    }
  return 0;
}
int main()
{
    int l,i,j,n,max=0;
	char s[501];
	char x[501][5];
	int num[501]={0};

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

    l=strlen(s);
	for(i=0;i<=l-n;i++)
	{
	    for(j=0;j<n;j++)
		{
		    *(*(x+i)+j)=*(s+i+j);

		}
		*(*(x+i)+j)='\0';
	}

	for(i=0;i<=l-n;i++)
	{
	    for(j=0;j<=l-n;j++)
		{
		    if(strcmp(*(x+i),*(x+j))==0)
				(*(num+i))++;
		}
	}

	for(i=0;i<=l-n;i++)
	{
        if(max<*(num+i))
			max=*(num+i);
	}


    if(max<=1)
	{
	    printf("NO\n");
	}
	else
	{
	for(i=0;i<=l-n;i++)
	{
	   
			for(j=0;j<i;j++)
			{
			     if(strcmp(*(x+i),*(x+j))==0)
					 *(num+i)=0;
			}
	}
	printf("%d\n",max);
	for(i=0;i<=l-n;i++)
	{
	      if(*(num+i)==max)
			 printf("%s\n",*(x+i));

	}
	}
	return 0;
}
int main()
{
	int n;
	scanf("%d",&n);
	char s[505]={'\0'},s1[100]={'\0'},s2[100]={'\0'};//s1?????,s2???s1??????????
	scanf("%s",s);
	int l=strlen(s),i,i1,j,j1,k=0,a[500]={0},num[500]={0},max=0;//i????????????i1?????????????j???s2???,j1?????s2???
	for(i=0;i<=l-n;i++)
	{
		if(a[i]==0)
		{
			for(i1=i;i1<=n+i-1;i1++)
				s1[k++]=s[i1];
			k=0;
			for(j=i+1;j<=l-n;j++)
			{
				for(j1=j;j1<=n+j-1;j1++)
					s2[k++]=s[j1];
				k=0;
				if(strcmp(s1,s2)==0)
				{
					a[j]=1;
					num[i]+=1;
				}
			}
		}
	}
	for(i=0;i<=499;i++)
	{
		if((num[i]+1)>max)
			max=num[i]+1;
	}
	if(max>1)
	{
		printf("%d\n",max);
		for(i=0;i<=499;i++)
		{
			if((num[i]+1)==max)
			{
				for(j=i;j<=i+n-1;j++)
					printf("%c",s[j]);
				printf("\n");
			}
		}
	}
	else
		printf("NO");
}
main()
{
 int n,i,j,l[500],k,a,b=0,m,d1=0,d2=0,d3[500]={0},k8,k9=0;
 static char s[500],o[500][5],l1[7];
 scanf("%d",&n);
 gets(l1);
 gets(s);
 for(i=0;s[i+n-1]!='\0';i++)
   for(j=0;j<n;j++)
     {
      o[i][j]=s[i+j];      
     } 
   a=i;
 for(i=0;i<a;i++)
  {
   for(j=0;j<a;j++)
     {
      m=1;
      for(k=0;k<n;k++)
        if(o[i][k]!=o[j][k])
         {
          m=0;
          break;
         }
      if(m==1)
        b++;
     }
   l[i]=b;
   b=0;
  }
 for(i=0;i<a;i++)
   if(d1<l[i])
     d1=l[i];
 if(d1<=1)
   printf("NO\n");
 else
  {
   printf("%d\n",d1);
   for(i=0;i<a;i++)
     {
      k9=0;
      if(d1==l[i])
       {
        for(k8=1;k8<=d2;k8++)
          if(0==strcmp(o[i],o[d3[k8]]))
            {
             k9=1;
             break;
            }
        if(k9==0)
        {for(k=0;k<n;k++)
          printf("%c",o[i][k]);
        printf("\n");}
       }
      d2++;
      d3[d2]=i;
       
     }
  }
}
int main()
{
   int n;
   cin >> n;
   cin.get();
   int i,j,k,l,p,t;
   char a[501];
   cin.getline(a,501);
   l=strlen(a);
    p=l-n+1;
    int b[501]; 
   for(i=0;i<501;i++)
   {
     b[i]=1;
   }
   char c[200][6]={0};
   for(i=0;i<p;i++)
   {
      for(t=0;t<n;t++)
      {
        c[i][t]=a[i+t];
        
      }
   }
  
   for(i=0;i<p;i++)
   {
      for(j=0;j<p;j++)
      {
         if((strcmp(c[i],c[j])==0)&&(b[i]!=0)&&(i!=j)&&(b[j]!=0))
         {
           b[i]=b[i]+1;
          
           b[j]=0;
         }
      }
   }
   int s=b[0];
   for(i=0;i<p;i++)
   {
     if(b[i]>=s)
     {
       s=b[i];
     }
   }
   if(s==1)
   {
       cout << "NO" << endl;
   }
   else
   {
       cout << s << endl;
      for(i=0;i<p;i++)
      {
        if(b[i]==s)
        {
          for(j=0;j<n;j++)
          {
            cout << c[i][j];
          }
          cout << endl;
        }
      }
   }
   cin.get();cin.get();cin.get();
   return 0;
}
int main(){
	int n,i,len,j,max=1;
	int b[500];
	char a[500];
	char c[500][5]={0};
	scanf("%d",&n);
	getchar();
	gets(a);
	len=strlen(a);
	for(i=0;i<=len-n;i++){
		b[i]=1;
		for(j=0;j<n;j++){
			c[i][j]=a[i+j];
		}
	}

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

	for(i=0;i<=len-n;i++){
		if(b[i]>max) max=b[i];
	}
	if(max==1) printf("NO");
	else{
		printf("%d\n",max);
		for(i=0;i<=len-n;i++){
			if(b[i]==max) printf("%s\n",c[i]);
		}
	}
	return 0;
}
char sentence[1000],word[1000][10];
int num[1000]={1},words,n,Max=0;

void seperate()   //????????n??????????? 
{int i,i1,j=0,k=0;
 for(i=0;sentence[i+n-1]!='\0';i++) 
   {for(i1=0;i1<n;i1++) {word[k][j]=sentence[i+i1];j++;}
    if(j==n) {word[k][n]=='\0';j=0;k++;}
      }
 words=k;
}

void coun() //??????????
{int i,j;
 for(i=0;i<words;i++) if(num[i]!=0) for(j=i+1;j<words;j++) if(strcmp(word[i],word[j])==0) {num[j]=0;num[i]++;}
 for(i=0;i<words;i++) if(num[i]>Max) Max=num[i];  //????? 
     } 

int main()
{int i;
 cin>>n;
 cin>>sentence;
 seperate();
 for(i=0;i<1000;i++) num[i]=1;
 coun();
 if(Max<=1) cout<<"NO"<<endl;
 else{cout<<Max<<endl; for(i=0;i<words;i++) if(num[i]==Max) cout<<word[i]<<endl;}
 return 0;
    }
int main(){
    char a[502],p[502][7];int len,n,re[502],max=0;
    memset(re,0,sizeof(re));
    scanf("%d",&n);
    scanf("%s",&a);
    len=strlen(a);
    for(int i=0;i<len-n+1;i++){
            for(int j=0;j<n;j++)p[i][j]=a[i+j];
            p[i][n]=0;
            }
    for(int i=0;i<len-n;i++)
    for(int j=i+1;j<len-n+1;j++)
    if(strcmp(&p[i][0],&p[j][0])==0)
    re[i]++;
    for(int i=0;i<len-n+1;i++)
    if(re[i]>max){max=re[i];}
    if(0==max){printf("NO");return 0;}
    printf("%d\n",max+1);
    for(int i=0;i<len-n+1;i++)
    if(re[i]==max)printf("%s\n",&p[i][0]);
    return 0;
}
main()
{
      char a[500];
      int c,d,e,f,g,h,i,k,m;
      int j[500];
      for(d=0;d<500;d++)
      j[d]=0;
      scanf("%d",&c);
      scanf("%s",a);
      e=strlen(a);
      char b[c];
      for(d=0;d<e-c+1;d++)
      {
      		for(f=0,g=d;f<c;f++,g++)
      		b[f]=a[g];
      		for(i=0,h=d;h<e-c+1;h++)
      		{
      			for(m=0;m<c;m++)
      			{
                      if(b[m]-a[h+m]==0)
                      i++;
                }
      			if(m==c)
      			{                
      				if(i==c)
      				{
      					j[d]++;
      				}
      				i=0;
      			}
      		}
      }
      for(d=0,k=j[0];d<e-c;d++)
      {
      		if(j[d]>k)
      		k=j[d];
      }
      if(k==1)
      		printf("NO");
      else
      {
      		printf("%d\n",k);
      		for(d=0;d<e-c;d++)
      		{
                    if(j[d]==k)
                    {
                        for(f=d;f<d+c;f++)
                        printf("%c",a[f]);
                        printf("\n");
                    }
            }
     }
}
main()
{
	int n;
	int i,j,k,m,a;
	char str[N];
	int temp=0;
	int  num[N]={0};
	scanf("%d",&n);
	scanf("%s",str);
	for(i=0;i<strlen(str)-n;i++)
	{
		for(j=i+1;j<strlen(str)-n+1;j++)
		{
			if(str[i]==str[j])
			{
				for(k=1;k<n;k++)
				{
					if(str[i+k]==str[j+k])
					   temp++;
				}
				if(temp==(n-1))
				  num[i]++;
			}
			temp=0;
		}
	}
	a=0;
	for(m=0;m<strlen(str)-n;m++)
	{
		if(num[m]>a)
		  a=num[m];
	}
	if(a==0)
	  printf("NO");
	else
	{
		printf("%d\n",a+1);
		for(j=0;j<strlen(str)-n+1;j++)
	    {
	    	if(num[j]==a)
	    	{
	    		for(i=0;i<n-1;i++)
	    		{
	    			printf("%c",str[j+i]);
	    		}
	    		printf("%c\n",str[j+n-1]);
	    	}
	    }
	}
}
//********************************
//*???n-gram????**
//*?????1300062805 **
//*???2013.12.17 **
//********************************
int main()
{
    int n, i, len, j, k;
    char a[501];
    char b[501][5];//????????????? 
    int c[501];//??????????????? 
    cin >> n; 
    cin.get();//???? 
    cin.getline( a , 501 );
    char *p;//???????a 
    p = a;
    char (*q)[5];//???????b 
    q = b;
    len = strlen(a);//???????? 
    k = 0;
    for( i = 0 ; i <= len - n ; i ++ )//?????????? 
    {  
        for( j = i; k <= n - 1; j ++, k ++ )    
        {
             q[i][k] = p[j]; 
               
        } 
        k = 0;   
    } 
    int sum;
    int temp = 0;
    int m = 0 ;
    for(i = 0; i <= len - n; i ++ )//????????????????????? 
    { 
        sum = 1;
        for(j = i; j < len - n; j ++) 
        {  
             if( strcmp( q[i], q[j + 1] ) == 0 )//?????sum?? 
             {
                     sum ++;                              
             }     
        }   
     
             if( sum > temp )// 
             {
                     temp = sum;       
                     k = i;
                     memset( c , 0 , sizeof(c) );
                     m = 0;
             }
             else
             {
                     if( sum == temp ) 
                     { 
                             c[m] = i;
                             m ++;
                     }  
             }   
    }     
    if(temp == 1)
    {
        cout << "NO" << endl ;       
    } 
    else 
    {
             cout << temp << endl;
             cout << b[k] << endl;
             for( i = 0 ; i <= m - 1 ; i ++ )
             {
                     cout << b[c[i]] << endl;      
             }
    }
    return 0;
}
main()
{
	int i,j,t=0,n,len,C[500];
	char a[500],b[500][5],c[500][5];
	scanf("%d%s",&n,a);
	len=strlen(a);
	for(i=0;i<len;i++) C[i]=1;

	for(i=0;i<len-n+1;i++)
	{for(j=0;j<n;j++)
		b[i][j]=a[i+j];
		b[i][j]='\0';
	}
	for(i=0;i<len-n+1;i++)
	{
		for(j=0;j<t;j++)
		{
			if(strcmp(b[i],c[j])==0) {C[j]++;break;}
		}
		if(j==t)
		{
			strcpy(c[t],b[i]);t++;
		}
	}
	j=1;
	for(i=0;i<t;i++)
	{
		if(C[i]>j) j=C[i];
	}
	if(j==1) printf("NO");
	else
	{
		printf("%d\n",j);
		for(i=0;i<t;i++)
			if(C[i]==j)
			printf("%s\n",c[i]);
	}
}
int main()
{
	char str[500],string[500][500];
	int i,j,m,n,k=0,a[500]={0},max=0,t=0;
	scanf("%d",&m);
	scanf("%s",str);
	n=strlen(str);
	for(i=0;i<=n-m;i++)
	{
		for(j=i;j<i+m;j++)
		{
			string[i][k]=str[j];
			k++;
		}
		string[i][k]='\0';
		k=0;
	}
	for(i=0;i<=n-m;i++)
	{
		for(j=0;j<=n-m;j++)
		{
			if(strcmp(string[i],string[j])==0) a[i]++;
		}
	}
	for(i=0;i<=n-m;i++)
	{
		if(a[i]>max) max=a[i];
	}
	if(max<=1) 
		printf("NO\n");
	else
	{
		printf("%d\n",max);
	    for(i=0;i<=n-m;i++)
		{
			if(a[i]==max)
			{
				for(j=0;j<i;j++)
				{
					if(strcmp(string[i],string[j])==0) 
					{
						t=1;
					    break;
					}
				}
			    if(t==0)
					printf("%s\n",string[i]);
			}
	        t=0;
		}
	}
    return 0;
}
//****************************
//*???3
//*??????
//*???2013.12.11
//****************************
int n;

int count1( char *p, char *P, int geshu )//????count?
{
	if ( geshu == n )//???????geshu=n???
	{
		if ( *p == *P )//?????????????????

			return 1;

		else 

			return 0;//????0
	}
	if ( *p == *P )//?????????????
	{
		if ( count1( p + 1, P + 1, geshu + 1 ) )//???????????1

			return 1;

		else 

			return 0;//?????
	}
	else 

		return 0;//??????????0
}
int main()
{
	char str[505], *p = NULL;//?????????

	int max = 1, cal = 0, num[505], f = 1, len;//??max???????? cal???? 
	//num????????????? f????????l???????

	cin >> n;//??n

	cin.get();//????

	cin.getline( str, 505 );//?????

	len = strlen( str );
	
	for ( p = str; *( p + n - 1 ) != '\0'; p++ )//????????????????????n???????
	{
		for ( int i = 1; *( p + i + n - 1 ) != '\0'; i++ )//????????????????????????
		
			f+=count1( p, p + i, 1 );//????f++
		
		if ( max <= f )//?????
		
			max = f;

		num[cal] = f;//???????????

		f = 1;

		cal++;

	}
	if ( max == 1 )//????????1???NO

		cout << "NO" << endl;

	else//?????????????????
	{
	    cout << max << endl;

        for ( int i = 0; i < len; i++ )
	    {
			p = str + i;
			
			if ( num[i] == max )
		    {
				for ( int j = 0; j < n; j++ )
					
					cout << *( p + j );
				
				cout << endl;
		    }
		}
	}
	return 0;
}
int main()
{
	int n;
	char c[550],a[5];
	char str[550][5];
	int num[550]={0};
	scanf("%d %s",&n,c);
	int l=strlen(c);
	int i,j;
	for(i=0;i<l-n+1;i++)
	{
		for(j=0;j<n;j++)
		{str[i][j]=c[i+j];}
		str[i][n]='\0';
	}
	int max=0;
	for(i=0;i<l-n+1;i++)
	{
		for(j=i;j<l-n+1;j++)
		{
			if(strcmp(str[i],str[j])==0) {num[i]++;}
		}
		if(num[i]>max) max=num[i];
	}
	if(max==1) {printf("NO") ;return 0;}
	printf("%d\n",max);
	for(i=0;i<l-n+1;i++)
	{
		if(num[i]==max) printf("%s\n",str[i]);
	}
	




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



}
int main()
{
	int m,n,i,ii=0,j,k,num[511]={0},p=0,q=0,s=0,v,mm,nn;
	char a[511],b[511][511],max[511];
	scanf("%d",&m);
	getchar();
	gets(a);
	n=strlen(a);
	for(i=0;i<=n-m;i++)
	{ii=0;
	for(j=0;j<m;)
		
	{
		b[p][j]=a[i+ii];
		ii+=1;
		
		j+=1;
	}
	
	
	b[p][j]='\0';
				
				p+=1;
				
	}
	for(q=0;q<=n-m;q++)
	{
		for(s=q;s<=n-m;s++)
		{
			if(strcmp(b[q],b[s])==0)
			{
				num[q]+=1;
			}
		}
	}
	mm=num[0];
	for(v=0;v<=n-m;v++)
	{
		if(num[v]>mm)
			mm=num[v];
	}
	if(mm>1)
	{
		printf("%d\n",mm);
		for(v=0;v<=n-m;v++)
		{
			if(num[v]==mm)
			{
				printf("%s\n",b[v]);
				
			}
		}
	}
	else
		printf("NO");
	return 0;
}