C - Permutando secuencias

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

Dada una permutación $P$ de los números de $1$ a $N$ y una secuencia $S$ de $M$ elementos formada por números enteros de $1$ a $N$, determinar la menor cadena lexicográficamente que se puede obtener como resultado de aplicar $P$ a $S$ cualquier cantidad de veces. 

Input

línea #1: Un solo entero $N$ $(1 \le N \le 250)$.
línea #2: $N$ enteros separados por espacios, representando la permutación $P$ de los números de $1$ a $N$.
línea #3: Un solo entero $M$ $(1 \le M \le 10^5)$.
línea #4: $M$ enteros separados por espacios, representando la secuencia $S$.

Output

línea #1: Un entero $K$, la cantidad mínima de veces que es necesario aplicar $P$ a $S$.
línea #2: Los $N$ enteros, separados por un espacio, de la menor secuencia lexicográficamente que Fito puede obtener aplicando $P$ a $S$ cualquier cantidad de veces.

Sample test(s)

Input
26 2 1 4 5 3 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 13 5 12 1 2 18 1 3 1 4 1 2 18 1
Output
4 3 12 1 2 18 1 4 1 5 1 2 18 1