По преподавательской натуре разложу решение на части, с пояснялками.
Во-первых, сердце решения задачи - поиск всех возможных перестановок из букв исходного слова.
Во вторых, каждую найденную перестановку надо сравнить с контрольными словами. Если соответствует - вывести, нет - перейти к другой перестановке.
Это вариант универсальный но не оптимальный. На больших наборах и длинном исходном слове устанем ждать, ибо n!*m - число возможных перестановок слова длиной N умножить на количество контрольных слов (кол-во сравнений).
Оптимизацию проведем в два этапа:
1. Исходный массив контрольных слов отсортируем, что резко ускорит поиск соответствия с m до log(2)m, и даже более, если перестановку сделать по уму.
2. Будем производить сравнение еще до конца формирования перестановки, чтобы отбросить заведомо негодные варианты.
... О! звонок на лекцию, пошел мучать студентов, допишу позже