Problema número 263

El cuadrado de Rubik

Tiempo máximo: 1,000-4,000 sMemoria máxima: 4096 KiB
El cubo de Rubik vs. Pacman

El cubo de Rubik es el juego de puzzle más vendido de la historia a nivel mundial. Como todo el mundo sabe, consiste en un cubo en el que cada una de sus seis caras está dividida en 9 cuadrados de un mismo color. Todo el cubo es articulado, de manera que los cuadrados pueden desplazarse de una cara a otra haciéndolas girar. El objetivo del juego es conseguir llegar a la configuración de partida, con cada cara de un único color, tras haberla descompuesto con movimientos aleatorios.

Los propietarios de la patente, tras cientos de millones de unidades vendidas, consideran que el mundo se les ha quedado pequeño y están intentando llegar a otros mercados. Se han dado cuenta de que algunas criaturas, como Mario, Sonic o Pacman, no son capaces de jugar al cubo de Rubik porque, por mucho que se les explica, no conciben la existencia de una tercera dimensión. De modo que están diseñando una versión simplificada de su juego: el cuadrado de Rubik.

En esencia, es similar al cubo, pero con sólo una cara. Los desplazamientos de los cuadrados se pueden realizar por filas o por columnas. Así, por ejemplo, si se desplaza una fila hacia la derecha, todos sus cuadrados avanzan una posición, y el cuadrado que estaba situado más a la derecha reaparece en el lado izquierdo.

Ejemplo de rotación hacia la derecha

Durante la primera fase del desarrollo de este nuevo producto, están planteándose sus dimensiones y su dificultad, por lo que quieren hacer un simulador del funcionamiento antes de comenzar el proceso de fabricación.

Entrada

El programa deberá leer varios casos de prueba de la entrada estándar. Cada caso de prueba estará compuesto de múltiples líneas. La primera indica el número n de cuadrados de ancho y alto del cuadrado de Rubik simulado, 1 ≤ n ≤ 50. A continuación vendrá la situación inicial del cuadrado de Rubik a través de n líneas, conteniendo exactamente n letras del alfabeto inglés. Cada letra representa el color de un cuadro interior del cuadrado de Rubik, y puede ser tanto en mayúsculas como minúsculas, considerándose diferentes.

Tras la configuración del cuadrado, vendrá una línea con las operaciones realizadas sobre él, separadas por espacios. Una operación está compuesta de dos partes: una letra indicando si el movimiento es sobre una fila ("f") o una columna ("c"), y un número v, cuyo valor absoluto 1 ≤ |v| ≤ n indica la fila o la columna sobre la que se realiza la operación. La fila 1 se corresponde con la primera línea de la descripción; la columna 1 se corresponde con la primera letra de cada línea. Si el número v es positivo, el desplazamiento será hacia la derecha (filas) o hacia abajo (columnas). Si es negativo será hacia la izquierda o hacia arriba. La lista de operaciones acaba con una "x".

La entrada acaba con un cuadrado de tamaño 0.

Salida

Para cada caso de prueba el programa escribirá, en la salida estándar, la configuración final del cuadrado de Rubik en el mismo formato que en la entrada.

Además, deberá escribir una línea con tres guiones ("---") después de cada caso de prueba.

Entrada de ejemplo

3
abc
abc
abc
f 1 f -2 x
3
aaa
bbb
ccc
c 1 c -2 x
0

Salida de ejemplo

cab
bca
abc
---
cba
acb
bac
---