B - Buscando palabras

Languages: C, C++, Java, Pascal, Python, Tiger, JavaScript, Haskell, C#
Time & Memory limits: (details)

Fito está buscando algunos conceptos de Programación Orientada a Objetos en uno de sus libros preferidos. El libro no es muy grande pero el programa que usa Fito para leer pdfs es muy lento cuando de encontrar palabras se trata. Fito por otra parte no ayuda mucho, porque su mala memoria lo obliga a buscar reiteradamente palabras parecidas hasta encontrar la correcta.

Cuando lleva un tiempo en este proceso agotador Fito decide hacer un buscador mejor él mismo. El buscador de Fito va a usar como patrón una especie de expresión regular. Este patrón es comparado con cada palabra y si son iguales se imprime como una ocurrencia. En el patrón pueden aparecer además de las letras los símbolos ? y ∗. El símbolo ? significa que en esa posición la palabra puede tener cualquier letra.  El símbolo ∗ por su parte significa que a partir de esa posición pueden aparecer en la palabra cualquier cantidad de letras (incluso ninguna).

Ayuda a Fito a construir un programa que dado una palabra y un patrón, diga si son iguales, dada la definición de igualdad dada en el problema


Input

La primera línea de la entrada son dos enteros $T$ ($1 \leq T \leq 2000)$  y $P ( 1 \leq P \leq 2000)$ la longitud de la palabra y la longitud del patrón respectivamente. Le siguen una línea con la palabra y otra con el patrón. Las letras que aparecen en el texto y en el patrón son letras minúsculas del alfabeto latino.

Output

Si la palabra es igual al patrón se debe imprimir $“SI”$, en caso contrario se imprime $“NO”$.

Sample test(s)

Input
9 6 algoritmo a?g*mo
Output
SI