Encuentra las palabras que encajan con los fragmentos

Un rompecabezas popular consiste en recibir una lista de fragmentos de palabras y combinarlos para formar un conjunto de palabras, de modo que cada fragmento se use una sola vez.

Para este desafío, escribe una función que reciba una lista de fragmentos y devuelva una lista ordenada de 20 palabras que se puedan formar con ellos.

Ejemplo

find_words(["er", "haw", "as", "dock", "yuc", "prim", "ia", "sy", "sy", "y", "i", "thorn", "bur", "weed", "snow", "sia", "tus", "cac", "pop", "clo", "chid", "pan", "ris", "dahl", "rose", "dai", "drop", "dog", "ver", "bind", "heath", "fuch", "mine", "ca", "lil", "ter", "jas", "wood", "py", "or"])
➞ ["aster", "bindweed", "burdock", "cactus", "clover", "dahlia", "daisy", "dogwood", "fuchsia", "hawthorn", "heather", "iris", "jasmine", "lily", "orchid", "pansy", "poppy", "primrose", "snowdrop", "yucca"]

Notas

  • Se necesita un diccionario para resolver este rompecabezas. En las pruebas se proporciona un conjunto de palabras DICTIONARY; contiene todas las palabras necesarias (además de algunas más, por si acaso y para hacer que la tarea sea un poco más desafiante).
  • Siempre tienes que devolver una lista de 20 palabras ordenadas de forma ascendente.
  • La lista de fragmentos de entrada contendrá 40 o 60 fragmentos. Habrá dos fragmentos por palabra si la lista tiene 40 fragmentos; en caso contrario, habrá tres fragmentos por palabra.
  • Una palabra siempre será simplemente los fragmentos combinados, sin espacios ni guiones entre ellos.
  • Los fragmentos no son necesariamente únicos dentro de una lista de fragmentos.