B - Buscador de Texto

Time limit: 5 s
Memory limit: 256 MiB
Languages: C, C++, Java, Haskell, ... (details)

Hoy en día la cantidad de información que hay en internet crece muy rápidamente, y en esta era de explosión de la tecnología es cada vez más importante el acceso a páginas web que contengan ciertamente datos relevantes a nuestras necesidades. Una de las formas más comunes de cuantificar esto último es mediante la búsqueda de palabras en los textos, y la asignación de puntuaciones en dependencia de la cantidad de coincidencias encontradas.

Hay muchas variantes para resolver este problema, pero vamos a concentrarnos en una versión reducida del mismo. La idea consiste en buscar una lista de palabras en un texto dado, pero lo que se quiere no es exactamente buscar esas palabras, si no concatenaciones de todas ellas (sin repetir) en cualquier orden. Por ejemplo si tenemos las palabras “ aa ”,” b ” y “ ccc ”, entonces las cadenas que estaremos buscando son:

" aabccc "
" aacccb "
" baaccc "
" bcccaa "
" cccaab "
" cccbaa "

El texto puede tener varias ocurrencias de estas cadenas. Lo que se necesita es contar la cantidad de posiciones donde aparecen algunas de estas palabras en el texto. Dos o más concatenaciones pueden ser iguales, pero en estos casos solo se contarían una vez. Por ejemplo si las palabras son “ a ” y “ aa ”, entonces “ aaa ” es el resultado de concatenar primero “ a ” y luego “ aa ”, así como de concatenar “ aa ” y luego “ a ”. En este caso una ocurrencia de “ aaa ” en el texto se cuenta como una sola.

Input

Línea 1 : En la primera línea de la entrada habrá un entero $N$ $(1 \leq N \leq 12)$ que representa la cantidad de palabras.
Línea 2...N+1 : Cada línea contendrá una palabra cuya longitud estará entre $1$ y $20$.
Línea N+2 : La última línea de la entrada tendrá el texto. La longitud del mismo será a lo sumo $5000$.

Output

Línea 1 : La salida debe contener una única línea con la solución al problema.

Sample test(s)

Input
3 aa b ccc aabccczbaacccbaazaabbcccaa
Output
5