#include<iostream>
#include<cstdio>
#include<cstring>
#define MAX_N 100
using namespace std;
int Next[MAX_N];
void getNext(char s[],int len){
int j=-1;
Next[0]=-1;
for(int i=1;i<len;i++){
while(j!=-1&&s[i]!=s[j+1]){
j=Next[j];
}
if(s[i]==s[j+1]){
j++;
}
Next[i]=j;
}
}
bool KMP(char text[],char pattern[]){
int n=strlen(text),m=strlen(pattern);
getNext(pattern,m);
int j=-1;
for(int i=0;i<n;i++){
while(j!=-1&&text[i]!=pattern[j+1]){
j=Next[j];
}
if(text[i]==pattern[j+1]){
j++;
}
if(j==m-1){
return true;
}
}
return false;
}
int main(){
char text[]="abcdefgabcdefg";//³¤´®
char pattern[]="abca";//¶Ì´®
int len=strlen(pattern);//¶Ì´®³¤¶È
int MinRt=len-Next[len-1]-1;// Min Repetend:¶Ì´®.×îСѻ·½Ú
getNext(pattern,strlen(pattern));
if(KMP(text,pattern))cout<<"YES"<<endl;
else cout<<"NO"<<endl;
// for(int i=0;i<strlen(pattern);i++){
// cout<<i<<" "<<Next[i]<<endl;
// }
}