def get_wordlist_of_all_possible_words(characters, length_of_words):
    """Get a list of all words, real and fabricated, of a certain length from the list of characters given

    >>> get_wordlist_of_all_possible_words("filyar", 2)
    ['fi', 'fl', 'fy', 'fa', 'fr', 'if', 'il', 'iy', 'ia', 'ir', 'lf', 'li', 'ly', 'la', 'lr', 'yf', 'yi', 'yl', 'ya', \
'yr', 'af', 'ai', 'al', 'ay', 'ar', 'rf', 'ri', 'rl', 'ry', 'ra']

    :param characters: string of scrambled characters
    :param length_of_words: length of words to be formed
    :return: list of words
    """
    characters = characters.lower()

    if length_of_words == 0:
        return []

    wordlist = [i for i in characters]
    num_of_occurrences = {}
    current_length_of_words = 1

    for i in characters:
        if i not in num_of_occurrences:
            num_of_occurrences[i] = 1
        else:
            num_of_occurrences[i] += 1

    while current_length_of_words < length_of_words:
        replacement_wordlist = []

        for i, value in enumerate(wordlist):
            [
                replacement_wordlist.append(f"{wordlist[i]}{j}") for j in characters
                if value.count(j) < num_of_occurrences[j] and f"{wordlist[i]}{j}" not in replacement_wordlist
            ]

        wordlist = replacement_wordlist
        current_length_of_words += 1

    return wordlist