#include <iostream>
#include <string.h>
#include <vector>
using namespace std;
const int num=128;
void trans( const string& p, unsigned int B[] )
{
int i;
memset( B, 0, sizeof( B ) );
for( i = 0; i < p.length(); i++ )
B[p[i]] = B[p[i]] | ( 1 << i );
}
void shiftAnd( const string& text, const string& p, const unsigned int B[] )
{
int D = 0;
int length = text.length();
int length1 = p.length();
for( int i = 0; i < length; ++i )
{
D = ( ( D << 1 ) | 1 ) & B[text[i]];
if( D & ( 1 << ( length1 - 1 ) ) )
{
cout << i - length1 + 1 << endl;
}
}
}
int main()
{
unsigned int B[num];
string text = "AGATACGATATATAC";
string p = "ATATA";
trans( p, B );
shiftAnd( text, p, B );
return 0;
}