Type Printer


Submit solution

Points: 100 (partial)
Time limit: 3.0s
Memory limit: 512M

Author:
Problem type
Allowed languages
Ada, BrainF***, C, C#, C++, Dart, Go, Java, JS, Kotlin, Lua, Pascal, Prolog, Python, Swift, VB

Necesitas imprimir N palabras en una imprenta de tipos móviles. Las imprentas de tipos móviles son aquellas viejas imprentas que requieren de acomodar pequeñas piezas de metal (cada una contiene una letra) con el fin de formar palabras, después una hoja de papel es prensada contra ellas para así imprimir la palabra. La imprenta que tienes te permite hacer cualquiera de las siguientes operaciones:

  • Agregar una letra al final de la palabra que esta actualmente en la imprenta.
  • Quitar la letra del final de la parabra que esta actualmente en la imprenta. Esta operación se permite sólo si hay al menos una letra en la imprenta.
  • Imprimir la palabra que está actualmente en la imprenta.

Inicialmente, la imprenta está vacía; es decir no contiene ninguna pieza metálica. Al terminar de imprimir las palabras, te está permitido dejar algunas letras en la imprenta. También, puedes imprimir las palabras en el orden que quieras.

Como cada operación require de mucho tiempo, quieres minimizar el número de operaciones.

PROBLEMA

Escribe un programa, que dadas las N palabras que quieres imprimir, encuentre el número mínimo de operaciones necesarias para imprimir todas las palabras en cualquier orden, así como la secuencia de operaciones.

CONSIDERACIONES

1 <= N <= 25.000 El número de palabras que tienes escribir.

ENTRADA

Tu programa deberá leer de la entrada estandar los siguientes datos:

La línea 1 contiene el entero N, el número de palabras que tienes que imprimir.

Las siguientes N líneas contienen una palabra cada una. Cada palabra está formada por letras minúsculas \((‘a’ – ‘z‘)\) solamente y tiene una longitud entre 1 y 20.

NOTA

Todas las palabras son distintas.

SALIDA

Tu programa deberá escribir a la salida estandar los siguientes datos:

La línea 1 deberá contener el entero M que representa el número mínimo de operaciones para imprimir las N palabras.

Las siguentes M lineas deben contener un caracter cada una. Estos caracteres describen la secuencia de operaciones realizada. Cada operación se describe de la siguiente manera:

  • Agregar una letra se representa con la misma letra en minuscula.

  • Quitar una letra se representa por el caracter \(‘-‘\) (signo de -, código ASCII 45).

  • Imprimir la palabra actual se representa por el caracter \(‘P’\) (letra P mayúscula).

EJEMPLO DE ENTRADA

3
print
the
poem

EJEMPLO DE SALIDA

20
t
h
e
P
-
-
-
p
o
e
m
P
-
-
-
r
i
n
t
P

Comments


  • -2
    rales  commented on Feb. 20, 2024, 1:37 p.m.

    easy