#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#define d 256
using namespace std;
string s,p;
void RK(int q){
int m=p.size();
int n=s.size();
int p_h=0;
int s_h=0;
int h=1;
for(int i=0;i<m-1;i++)h=(h*d)%q;
for(int i=0;i<m;i++){
p_h= ( d * p_h + p[i] ) % q;
s_h= ( d * s_h + s[i] ) % q;
}
for(int i=0;i<n-m;i++){
if(p_h==s_h){
int j;
for(j=0;j<m;j++)
if(s[i+j]!=p[j])break;
if(j==m)printf("P occurs with shifts: %d\n",i);
}
if(i<n-m){
s_h=(d*(s_h-s[i]*h)+s[i+m])%q;
if(s_h<0)
s_h+=q;
}
}
}
int main(){
s="GEEKlmnaS FOR GEEKlmnaS njknaskjdaskjbdkjasbdjas njabijbaslbckjsbfGEEKlmnaS FOR GEEKlmnaS";
p="GEEKlmna";
int mod=127;
RK(mod);
}