Triple ordenación: frecuencia, longitud, lexicográficamente

Python Hard sorting

Tarea «Triple ordenación: frecuencia, longitud, lexicográficamente»

Dada una lista de cadenas. Se requiere ordenar las cadenas según tres criterios: primero por frecuencia de aparición de la cadena en la lista original en orden descendente, luego por longitud de la cadena en orden ascendente, y finalmente lexicográficamente (en orden ascendente, comparación estándar de cadenas). Si dos cadenas tienen la misma frecuencia y longitud, se comparan lexicográficamente. Implemente la ordenación sin usar la función incorporada sort con clave personalizada (prohibido), sino solo con su propia función de ordenación (por ejemplo, ordenación rápida, ordenación por mezcla u otra). Datos de entrada: primero un número entero N (1 ≤ N ≤ 10^5) — la cantidad de cadenas, luego N cadenas. Imprima las cadenas en el orden ordenado, cada una en una nueva línea. Límite de tiempo: 2 segundos, de memoria: 256 MB.

Formato de entrada

La primera línea contiene un número entero N (1 ≤ N ≤ 10^5). A continuación, siguen N cadenas, cada una puede contener cualquier carácter imprimible (excepto espacios), la longitud de la cadena es de 1 a 20 caracteres.

Formato de salida

Imprima N cadenas en el orden requerido, cada una en una línea separada.

Ejemplos

Ejemplo 1

ENTRADA
1 10
SALIDA
17

Ejemplo 2

ENTRADA
5 3 1 4 1 5
SALIDA
3 1 4 1 5
main.py