#!/usr/bin/python
import sys

def boyer_moore(P, T):
	"""funcion principal para obtener las
	correspondencias
	"""
	encontrados = []
	m = len(T)
	n = len(P)
	pre = preprocesamiento(P)	
	c = 0
	while m > c + (n - 1):
		for pos_P in xrange(n-1, -1, -1):
			pos_T = c + pos_P
			x = T[pos_T]
			y = P[pos_P]
			if pos_T >= m:
				break
			if x != y:
				r = pre.get(x)
				if x not in pre:
					c = pos_T + 1
				else:
					mov = pos_T - (c + r)
					c += (mov > 0 and mov or 1)
				break
			elif pos_P == 0:
				encontrados.append(c)
				c += 1

	return encontrados

def preprocesamiento(P):
	"""funcion de preprocesamiento 
	"""
	map = { }
	l_p = len(P)
	for i in xrange(l_p-1, -1, -1):
		s = P[i]
		if s not in map:
			map[s] = i
	return map

def main():
    try:
        T = sys.argv[1]
        P = sys.argv[2]
    except:
        print "No escribiste palabras"
        return
    print "El texto es %s" %T
    print "El patron es %s" %P
    encontrados = boyer_moore(P, T)
    if len(encontrados) > 0:
	    print "Las cadenas se encuentran en %s" %encontrados

main()