const words = [
    "aalen",
    "Abart",
    "abbat",
    "Abbau",
    "abbog",
    "Abend",
    "abgab",
    "Abgas",
    "abhob",
    "Abhol",
    "abkam",
    "ablag",
    "Abort",
    "Abruf",
    "absah",
    "Absud",
    "abtat",
    "Abtei",
    "abtun",
    "Abweg",
    "abwog",
    "abzog",
    "Abzug",
    "Achse",
    "Acker",
    "Acryl",
    "Adams",
    "adeln",
    "Adels",
    "adieu",
    "Adler",
    "adlig",
    "Affen",
    "affig",
    "After",
    "Agave",
    "Agent",
    "Agrar",
    "ahmen",
    "ahnen",
    "Ahorn",
    "Akten",
    "Aktie",
    "aktiv",
    "Aktor",
    "Alarm",
    "Alben",
    "Album",
    "alert",
    "alias",
    "Alibi",
    "Allee",
    "allwo",
    "allzu",
    "Alpen",
    "Alpha",
    "alpin",
    "Altar",
    "Alten",
    "Alter",
    "Ammen",
    "Ampel",
    "Amsel",
    "amten",
    "Anbau",
    "anbei",
    "anbot",
    "andre",
    "angab",
    "Angel",
    "angst",
    "anhob",
    "ankam",
    "Anker",
    "Anmut",
    "Anruf",
    "ansah",
    "antat",
    "antik",
    "antun",
    "anzog",
    "Anzug",
    "apart",
    "Apfel",
    "April",
    "Apsis",
    "Arche",
    "Areal",
    "Arena",
    "Arier",
    "Armee",
    "Armen",
    "Armut",
    "Aroma",
    "Arsch",
    "Arsen",
    "arten",
    "artig",
    "Asche",
    "Asien",
    "Asket",
    "Aspik",
    "Assel",
    "Aster",
    "Astro",
    "Atlas",
    "atmen",
    "Atoll",
    "Audio",
    "Augen",
    "Autor",
    "Axiom",
    "baden",
    "Bahre",
    "Bambi",
    "banal",
    "Bande",
    "Banjo",
    "Barde",
    "Baron",
    "barst",
    "basal",
    "Basar",
    "Basis",
    "Batik",
    "Bauch",
    "bauen",
    "Bauer",
    "beben",
    "Beere",
    "begab",
    "beide",
    "beige",
    "bekam",
    "Belag",
    "Beleg",
    "belud",
    "Berge",
    "Beruf",
    "besah",
    "Besen",
    "beste",
    "beten",
    "Beton",
    "Beuge",
    "Beule",
    "Beute",
    "bevor",
    "bewog",
    "Bezug",
    "Bibel",
    "Biber",
    "Biene",
    "Biest",
    "Binde",
    "Binse",
    "birgt",
    "Birke",
    "Birne",
    "Bitte",
    "Biwak",
    "blank",
    "Blase",
    "blass",
    "Blatt",
    "Blech",
    "blich",
    "Blick",
    "blieb",
    "blies",
    "blind",
    "Blink",
    "Blitz",
    "Block",
    "blond",
    "Bluff",
    "Blume",
    "Bluse",
    "Boden",
    "Bogen",
    "Bohle",
    "Bohne",
    "Bombe",
    "Bongo",
    "Bonus",
    "Bonze",
    "Boots",
    "Borke",
    "Borte",
    "Boten",
    "Bowle",
    "boxen",
    "Boxer",
    "brach",
    "Brand",
    "Braue",
    "braun",
    "Braut",
    "Brech",
    "breit",
    "Brems",
    "Brenn",
    "Brett",
    "Brief",
    "briet",
    "Brise",
    "Brite",
    "Bruch",
    "Brumm",
    "Brust",
    "Buben",
    "buhen",
    "Bulle",
    "Busch",
    "Busen",
    "Butan",
    "Butze",
    "Celli",
    "Cello",
    "Chaos",
    "Chaot",
    "Chlor",
    "Choke",
    "Chrom",
    "Civil",
    "Clown",
    "Cobra",
    "Codex",
    "Comic",
    "Couch",
    "Coupe",
    "Creme",
    "Curry",
    "dabei",
    "Dachs",
    "daher",
    "dahin",
    "Damen",
    "damit",
    "Dampf",
    "Dandy",
    "daran",
    "darum",
    "Datei",
    "Daten",
    "Datex",
    "Dativ",
    "Datum",
    "Dauer",
    "Daune",
    "davon",
    "davor",
    "debil",
    "Degen",
    "Deich",
    "Dekan",
    "Dekor",
    "Delle",
    "Delta",
    "Demut",
    "Depot",
    "derer",
    "desto",
    "Devon",
    "devot",
    "dicht",
    "Diele",
    "Dildo",
    "Dinar",
    "Diode",
    "Dirne",
    "Diwan",
    "Docht",
    "Dogge",
    "Dogma",
    "Dohle",
    "Dolch",
    "Donau",
    "Dosen",
    "Dosis",
    "Draht",
    "drall",
    "Drama",
    "drang",
    "drauf",
    "Dreck",
    "Drift",
    "Drink",
    "dritt",
    "Droge",
    "Druck",
    "Dudel",
    "Duell",
    "Duett",
    "dumpf",
    "Dunst",
    "durch",
    "Durst",
    "Dusch",
    "Dusel",
    "duzen",
    "ebben",
    "Ebene",
    "ebnen",
    "ecken",
    "eckig",
    "Edukt",
    "ehren",
    "Eiche",
    "Eifer",
    "eigen",
    "eilen",
    "eilig",
    "Eimer",
    "einen",
    "einig",
    "Eisen",
    "eisig",
    "eitel",
    "Eiter",
    "ekeln",
    "Eklat",
    "eklig",
    "Ekzem",
    "elend",
    "Elfen",
    "Elite",
    "Ellen",
    "empor",
    "emsig",
    "enden",
    "Engel",
    "engen",
    "Enkel",
    "enorm",
    "Enten",
    "Enzym",
    "erbat",
    "erben",
    "Erbin",
    "Erbse",
    "erden",
    "erdig",
    "ergab",
    "Erker",
    "erlag",
    "ernst",
    "Ernte",
    "erzog",
    "Esche",
    "Essen",
    "Esser",
    "Essig",
    "Etage",
    "Ethik",
    "Ethos",
    "Eulen",
    "Euter",
    "exakt",
    "extra",
    "Fabel",
    "Faden",
    "Fahne",
    "Fahrt",
    "Falke",
    "Falle",
    "falls",
    "Falte",
    "famos",
    "Fango",
    "Farbe",
    "Fasan",
    "Faser",
    "fatal",
    "Fatum",
    "Fauna",
    "Faust",
    "faxen",
    "Fazit",
    "Fecht",
    "Feder",
    "fegen",
    "Feger",
    "Fehde",
    "Feier",
    "Feile",
    "feind",
    "Felge",
    "Ferse",
    "fesch",
    "Feuer",
    "Fibel",
    "Fiber",
    "fidel",
    "Figur",
    "Filet",
    "final",
    "finit",
    "Finne",
    "Finte",
    "Firma",
    "First",
    "Fisch",
    "fixen",
    "Fixer",
    "Fjord",
    "flach",
    "Flair",
    "Flaum",
    "Fleck",
    "flink",
    "Flirt",
    "Flora",
    "floss",
    "flott",
    "Fluch",
    "flugs",
    "Fluid",
    "Fluor",
    "Fluss",
    "focht",
    "Fokus",
    "Folge",
    "Folie",
    "Foren",
    "Forst",
    "Forum",
    "Foyer",
    "Frack",
    "Frage",
    "Franc",
    "Freak",
    "frech",
    "fremd",
    "Fress",
    "Freud",
    "Frist",
    "fromm",
    "Front",
    "Frost",
    "Frust",
    "Fuchs",
    "Fuder",
    "Fugen",
    "Fuhre",
    "Furie",
    "Fusel",
    "Futur",
    "Gabel",
    "Galle",
    "Garbe",
    "Garde",
    "garni",
    "Gasse",
    "Gassi",
    "Gatte",
    "Gauda",
    "gebar",
    "geben",
    "Geber",
    "Gebet",
    "Gebot",
    "gegen",
    "gehen",
    "Geier",
    "Geige",
    "Geist",
    "Gelee",
    "genau",
    "Genie",
    "Genom",
    "Genre",
    "genug",
    "Genus",
    "Geste",
    "getan",
    "Getto",
    "Getue",
    "Gicht",
    "Gilde",
    "Ginko",
    "Glanz",
    "glatt",
    "Gleis",
    "Gleit",
    "glich",
    "Glied",
    "Glimm",
    "glitt",
    "Gnade",
    "Gosse",
    "Gouda",
    "Gramm",
    "Graph",
    "Greif",
    "Greis",
    "grell",
    "Grenz",
    "griff",
    "Grill",
    "Grips",
    "Groll",
    "Grube",
    "Gruft",
    "Grund",
    "Gulag",
    "Gummi",
    "Gunst",
    "Gurke",
    "Gusto",
    "haben",
    "Hades",
    "Hafen",
    "Hafer",
    "Hagel",
    "hager",
    "haken",
    "Halde",
    "hallo",
    "Halte",
    "Handy",
    "Hanse",
    "Harem",
    "Harfe",
    "Hasel",
    "Hasen",
    "hatte",
    "Haube",
    "Hauch",
    "hauen",
    "Hauer",
    "Haupt",
    "Hebel",
    "heben",
    "Heber",
    "Hecht",
    "hegen",
    "Heide",
    "Helot",
    "Henne",
    "herab",
    "heran",
    "herum",
    "herzu",
    "heuer",
    "heute",
    "hexen",
    "Hexer",
    "hielt",
    "Hilfe",
    "Hilfs",
    "hilft",
    "hinab",
    "hinan",
    "Hindu",
    "hinzu",
    "Hirse",
    "Hirte",
    "Hitze",
    "Hobby",
    "Hobel",
    "Hoden",
    "holen",
    "Honig",
    "Horde",
    "Horst",
    "Hosen",
    "Hotel",
    "human",
    "humid",
    "Humor",
    "Humus",
    "Hunde",
    "Hunne",
    "hupen",
    "huren",
    "hurra",
    "Husar",
    "Hydra",
    "Hymne",
    "ideal",
    "Ideen",
    "Idiot",
    "Idyll",
    "Ihnen",
    "igeln",
    "Ikone",
    "Iltis",
    "Image",
    "Imker",
    "immer",
    "immun",
    "indem",
    "indes",
    "Index",
    "Indio",
    "Indiz",
    "infam",
    "Innen",
    "innig",
    "Insel",
    "intim",
    "intus",
    "Ionen",
    "irden",
    "irren",
    "irrig",
    "Islam",
    "Jacht",
    "Jacke",
    "jagen",
    "Japan",
    "jeher",
    "jetzt",
    "Joker",
    "Jolle",
    "Joule",
    "Jubel",
    "Juden",
    "Jumbo",
    "Junge",
    "Juras",
    "Juror",
    "Juwel",
    "Kabel",
    "Kader",
    "Kakao",
    "Kalbs",
    "Kalif",
    "Kamel",
    "Kamin",
    "Kampf",
    "Kanal",
    "Kanne",
    "Kanon",
    "Kante",
    "Kappe",
    "Karat",
    "Karre",
    "Karte",
    "Kasko",
    "Kasse",
    "Kasus",
    "Kater",
    "Katze",
    "kauen",
    "Kegel",
    "Kehle",
    "Kelch",
    "Kelle",
    "Kerze",
    "Kette",
    "Keule",
    "Kiepe",
    "Kiosk",
    "Kippe",
    "Kirch",
    "Kiste",
    "Klage",
    "klamm",
    "klang",
    "Klapp",
    "Klebe",
    "Kleid",
    "Kleie",
    "klein",
    "Klemm",
    "Klick",
    "Klima",
    "klipp",
    "Klops",
    "Klotz",
    "Kluft",
    "Knabe",
    "Knack",
    "Knall",
    "knapp",
    "Knast",
    "Knauf",
    "Knick",
    "knien",
    "kniff",
    "Knopf",
    "Kobra",
    "Kodex",
    "Kohle",
    "Kokon",
    "Kolik",
    "Komet",
    "Komik",
    "Komma",
    "Konto",
    "Kopie",
    "Koran",
    "Korps",
    "Korso",
    "Kosak",
    "Krach",
    "kraft",
    "Krake",
    "krank",
    "Kranz",
    "krass",
    "kraus",
    "Kraut",
    "Krebs",
    "Kreis",
    "Krepp",
    "Kreuz",
    "Krieg",
    "Krimi",
    "Krise",
    "kroch",
    "Krone",
    "Kropf",
    "kross",
    "Krume",
    "krumm",
    "Kuben",
    "Kubus",
    "Kugel",
    "Kuhle",
    "Kunde",
    "Kunst",
    "Kupee",
    "Kupon",
    "Kuppe",
    "kuren",
    "Kurie",
    "Kurve",
    "laben",
    "labil",
    "Labor",
    "Lache",
    "Lachs",
    "laden",
    "Lader",
    "Lagen",
    "Lager",
    "Lakai",
    "Laken",
    "Lamee",
    "Lampe",
    "Lande",
    "Lanze",
    "Larve",
    "Laser",
    "Lasso",
    "Latex",
    "Latte",
    "Laube",
    "Lauch",
    "Lauer",
    "Laune",
    "leben",
    "Leber",
    "Leder",
    "ledig",
    "legal",
    "legen",
    "leger",
    "Lehne",
    "Lehre",
    "leibt",
    "Leier",
    "Leine",
    "leise",
    "Lemma",
    "Lende",
    "Lepra",
    "Lesbe",
    "lesen",
    "Leser",
    "Letzt",
    "Leute",
    "Liane",
    "licht",
    "Liebe",
    "Liege",
    "liest",
    "Ligen",
    "Lilie",
    "Limes",
    "Limit",
    "Linde",
    "Linie",
    "linke",
    "links",
    "Linse",
    "Lippe",
    "Liter",
    "Litze",
    "Lobby",
    "loben",
    "Logik",
    "Logis",
    "lokal",
    "losen",
    "loten",
    "Lotos",
    "Lotse",
    "Lotto",
    "loyal",
    "Luchs",
    "Luder",
    "lugen",
    "Lunge",
    "Lunte",
    "Luxus",
    "Lymph",
    "Lyrik",
    "Macho",
    "Macht",
    "Macke",
    "madig",
    "Mafia",
    "Magen",
    "mager",
    "Magie",
    "Magma",
    "magst",
    "Major",
    "Makel",
    "Makro",
    "malen",
    "Maler",
    "Malus",
    "Malve",
    "manch",
    "Manie",
    "Manko",
    "Manna",
    "Mappe",
    "Marge",
    "Markt",
    "Maske",
    "Masse",
    "Mauer",
    "Media",
    "Meile",
    "Meise",
    "meist",
    "Melde",
    "Menge",
    "Mensa",
    "Messe",
    "Meter",
    "Meute",
    "Miene",
    "Miete",
    "Mieze",
    "Mikro",
    "Milan",
    "Milbe",
    "Milch",
    "Miliz",
    "Mimik",
    "Minen",
    "minus",
    "Misch",
    "Mitte",
    "mixen",
    "Mixer",
    "mobil",
    "Modul",
    "Modus",
    "Mogul",
    "Mokka",
    "Monat",
    "Moped",
    "Moral",
    "Morse",
    "Motel",
    "Motiv",
    "Motor",
    "Motte",
    "Motto",
    "Muffe",
    "Mulde",
    "Multi",
    "Mumie",
    "Murks",
    "Musik",
    "musst",
    "muten",
    "mutig",
    "Mutti",
    "Myrre",
    "Nabel",
    "Nacht",
    "nackt",
    "Nadel",
    "Nagel",
    "nagen",
    "Nager",
    "nahen",
    "Namen",
    "Narbe",
    "Nasen",
    "nativ",
    "Natur",
    "Nebel",
    "neben",
    "nebst",
    "Neffe",
    "Nelke",
    "netto",
    "neuer",
    "neunt",
    "nicht",
    "Niere",
    "Niete",
    "nimmt",
    "nobel",
    "Nomen",
    "Nonne",
    "norme",
    "Notar",
    "Noten",
    "Notiz",
    "Novum",
    "Nudel",
    "Nugat",
    "Nylon",
    "Obhut",
    "oblag",
    "ocker",
    "Odium",,
    "offen",
    "Oheim",
    "Ohren",
    "Oktan",
    "Oktav",
    "Olive",
    "Olymp",
    "Onkel",
    "Opern",
    "Opfer",
    "Opium",
    "Optik",
    "Orbit",
    "Orden",
    "Order",
    "Organ",
    "Orgel",
    "Orgie",
    "Orkan",
    "orten",
    "Osten",
    "Oster",
    "Otter",
    "Ozean",
    "Pacht",
    "Paket",
    "Palme",
    "Panik",
    "Panne",
    "Pappe",
    "Papst",
    "parat",
    "Pasta",
    "Paste",
    "Pater",
    "Pauke",
    "Pause",
    "Pedal",
    "Pegel",
    "Perle",
    "Pfahl",
    "Pfand",
    "Pfarr",
    "Pfeil",
    "Pferd",
    "pfiff",
    "Pflug",
    "Pfote",
    "Pfuhl",
    "Pfund",
    "Phase",
    "Photo",
    "piano",
    "Piezo",
    "Pille",
    "Pilot",
    "Pinie",
    "Pinne",
    "Pirat",
    "Piste",
    "Pixel",
    "Pizza",
    "platt",
    "Platz",
    "plump",
    "Pluto",
    "Pokal",
    "Poker",
    "polar",
    "Polen",
    "polig",
    "Polis",
    "Polit",
    "Polle",
    "Polyp",
    "Poren",
    "Porti",
    "Porto",
    "Posse",
    "prall",
    "Preis",
    "Press",
    "pries",
    "prima",
    "Prime",
    "Prinz",
    "Probe",
    "Profi",
    "Prosa",
    "prost",
    "Prunk",
    "Psalm",
    "Pudel",
    "Puder",
    "Pulle",
    "Pulli",
    "Pumpe",
    "Punkt",
    "Puppe",
    "Puter",
    "Pylon",
    "Qualm",
    "Quant",
    "Quark",
    "Quart",
    "Quarz",
    "quasi",
    "Quell",
    "Quere",
    "Quirl",
    "quitt",
    "Quote",
    "Rache",
    "Radar",
    "Radau",
    "Radio",
    "Radon",
    "ragen",
    "Rampe",
    "rapid",
    "Rappe",
    "rasch",
    "rasen",
    "Rasse",
    "raten",
    "Ratte",
    "Rauch",
    "Raudi",
    "rauen",
    "Raupe",
    "Realo",
    "recht",
    "reden",
    "reell",
    "Regal",
    "Regel",
    "regen",
    "Regie",
    "reich",
    "Reihe",
    "Reise",
    "remis",
    "Rente",
    "reuig",
    "Revue",
    "Richt",
    "Ricke",
    "Riege",
    "Riese",
    "riete",
    "rigid",
    "Rille",
    "Rinde",
    "rings",
    "Rinne",
    "Rippe",
    "Riten",
    "Robbe",
    "roden",
    "Rolle",
    "Rolli",
    "Roman",
    "Rommé",
    "Rondo",
    "Rosen",
    "rosig",
    "Rotor",
    "Route",
    "Rubel",
    "Rubin",
    "Ruder",
    "rufen",
    "Rufer",
    "Rugby",
    "ruhen",
    "ruhig",
    "Rumpf",
    "Runde",
    "Rupie",
    "Sache",
    "sacht",
    "sagen",
    "Sahne",
    "Saite",
    "Salat",
    "Salbe",
    "Saldo",
    "Salon",
    "Salto",
    "Salut",
    "Salve",
    "Samba",
    "Samen",
    "sanft",
    "Satan",
    "Satin",
    "Satyr",
    "Sauce",
    "sauen",
    "sauer",
    "Sauna",
    "Schad",
    "Schaf",
    "Schah",
    "schal",
    "Scham",
    "Schar",
    "Schau",
    "scheu",
    "schob",
    "schon",
    "schor",
    "Schub",
    "schuf",
    "Schuh",
    "Schul",
    "Schur",
    "sechs",
    "Seele",
    "Segel",
    "Segen",
    "sehen",
    "Seher",
    "Seide",
    "Seife",
    "Seite",
    "selbe",
    "selig",
    "Semit",
    "Senat",
    "Sende",
    "senil",
    "Señor",
    "Seren",
    "Serie",
    "Serum",
    "Sesam",
    "Sexte",
    "Sexus",
    "Sicht",
    "siech",
    "sieht",
    "Silbe",
    "Sinus",
    "Sippe",
    "Sirup",
    "Sitte",
    "Skala",
    "Skalp",
    "Skier",
    "Slawe",
    "smart",
    "Socke",
    "sogar",
    "Sohle",
    "solch",
    "Solei",
    "solle",
    "somit",
    "Sonde",
    "Sonne",
    "sonor",
    "sonst",
    "sooft",
    "Sorge",
    "Sorte",
    "sowie",
    "Spalt",
    "Spann",
    "Spant",
    "Spatz",
    "Speck",
    "Speer",
    "Sperr",
    "Spezi",
    "Spiel",
    "spien",
    "Spike",
    "Spind",
    "Spion",
    "spitz",
    "Spore",
    "Sporn",
    "Sport",
    "Spott",
    "Spreu",
    "Sprit",
    "Spule",
    "Spurt",
    "Staat",
    "Stabs",
    "stach",
    "Stadt",
    "stahl",
    "Stall",
    "Stamm",
    "stand",
    "stank",
    "starb",
    "stark",
    "starr",
    "Start",
    "statt",
    "Staub",
    "Steak",
    "Stech",
    "Steck",
    "steif",
    "Steig",
    "steil",
    "Stein",
    "Stell",
    "Stemm",
    "Stern",
    "stete",
    "stets",
    "Stich",
    "stieg",
    "Stiel",
    "Stier",
    "Stift",
    "still",
    "Stimm",
    "Stirn",
    "Stock",
    "Stoff",
    "Stola",
    "stolz",
    "Stopp",
    "Straf",
    "Streb",
    "Streu",
    "Stroh",
    "Strom",
    "Stube",
    "Stuck",
    "Stufe",
    "Stuhl",
    "stumm",
    "Stunk",
    "Sturm",
    "Sturz",
    "Stuss",
    "Stute",
    "Suche",
    "Sucht",
    "Suite",
    "Summe",
    "Sumpf",
    "super",
    "Suppe",
    "Sushi",
    "Szene",
    "Tabak",
    "Tadel",
    "Tafel",
    "tagen",
    "Tages",
    "Taiga",
    "Takel",
    "Taler",
    "Talon",
    "Tango",
    "Tanne",
    "Tante",
    "Tapet",
    "Tarif",
    "Tasse",
    "Taste",
    "Tatze",
    "Taube",
    "Tauch",
    "tauen",
    "Taxen",
    "Teeei",
    "Teich",
    "Teile",
    "Teint",
    "Telex",
    "Tempo",
    "Tenne",
    "Tenor",
    "teuer",
    "Theke",
    "Thema",
    "These",
    "Thron",
    "Tiger",
    "Tilde",
    "Tinte",
    "Tisch",
    "Titan",
    "Titel",
    "Toast",
    "toben",
    "Todes",
    "Tonne",
    "Topas",
    "Torso",
    "Torte",
    "tosen",
    "total",
    "Toten",
    "Trafo",
    "Trage",
    "Trakt",
    "trank",
    "Traum",
    "Treff",
    "Treib",
    "Trend",
    "Trenn",
    "Treue",
    "Trias",
    "Trick",
    "trieb",
    "Trink",
    "trist",
    "Tritt",
    "Troll",
    "Tropf",
    "Tross",
    "Trost",
    "Trott",
    "trotz",
    "Truhe",
    "Trunk",
    "Trupp",
    "tuend",
    "Tulpe",
    "Tumor",
    "Tunte",
    "Turbo",
    "Tusch",
    "tuten",
    "Tutor",
    "Typen",
    "Typus",
    "ulken",
    "ulkig",
    "Ultra",
    "Umbau",
    "umgab",
    "umher",
    "umhin",
    "umkam",
    "umsah",
    "umtun",
    "Umweg",
    "umzog",
    "Umzug",
    "Unfug",
    "Union",
    "unken",
    "Unmut",
    "Unrat",
    "Unruh",
    "unser",
    "unsre",
    "unten",
    "unter",
    "Urahn",
    "uralt",
    "urban",
    "Vater",
    "vegan",
    "Velin",
    "Venen",
    "Venus",
    "Video",
    "viert",
    "Vikar",
    "Villa",
    "Viper",
    "Viren",
    "Virus",
    "Visum",
    "vital",
    "Vlies",
    "Vogel",
    "voilà",
    "Vokal",
    "Volks",
    "vorab",
    "voran",
    "vorig",
    "Votum",
    "Waage",
    "Wache",
    "Wachs",
    "Wacht",
    "Waden",
    "Waffe",
    "wagen",
    "Wagon",
    "Waise",
    "Walze",
    "Wange",
    "Wanne",
    "Wanst",
    "Wanze",
    "waren",
    "Warte",
    "warum",
    "Warze",
    "Wasch",
    "waten",
    "Watte",
    "weben",
    "Weber",
    "Wedel",
    "weder",
    "wehen",
    "weich",
    "Weide",
    "Weihe",
    "weise",
    "Weite",
    "welch",
    "Welle",
    "Welpe",
    "Wende",
    "wenig",
    "Werbe",
    "Werft",
    "Werks",
    "Werte",
    "Wesen",
    "Wespe",
    "Weste",
    "Wette",
    "Wicke",
    "wider",
    "Wiese",
    "wieso",
    "Wille",
    "wirbt",
    "wirft",
    "wirst",
    "Wisch",
    "Witwe",
    "wobei",
    "Woche",
    "Wodka",
    "woher",
    "wohin",
    "Wolfs",
    "Wolke",
    "Wolle",
    "womit",
    "Wonne",
    "woran",
    "worin",
    "worum",
    "Wotan",
    "wovon",
    "wovor",
    "Wrack",
    "wrang",
    "wuchs",
    "Wucht",
    "Wulst",
    "Wunde",
    "wurde",
    "Wurst",
    "wusch",
    "Yacht",
    "Zange",
    "Zebra",
    "Zeche",
    "zehnt",
    "Zeige",
    "Zeile",
    "Zelle",
    "Zeter",
    "Zicke",
    "Ziege",
    "Zille",
    "zirka",
    "Zitat",
    "Zitze",
    "zivil",
    "Zobel",
    "Zonen",
    "zotig",
    "Zuber",
    "Zucht",
    "zudem",
    "zugab",
    "zugig",
    "zumal",
    "Zunft",
    "Zunge",
    "Zuruf",
    "zusah",
    "Zutat",
    "Zutun",
    "zuvor",
    "zuzog",
    "Zuzug",
    "zwang",
    "Zweck",
    "Zweig",
    "zweit",
    "Zwerg",
    "Zwirn",
    "Zwist",
    "Zyste",
    ];


    const lowerWords = words.map(word => word.toLowerCase());
    
    const letterArr = [
        "Q",
        "W",
        "E",
        "R",
        "T",
        "Z",
        "U",
        "I",
        "O",
        "P",
        "A",
        "S",
        "D",
        "F",
        "G",
        "H",
        "J",
        "K",
        "L",
        "ENTER",
        "Y",
        "X",
        "C",
        "V",
        "B",
        "N",
        "M",
        "DEL",
      ];
      let END = false;
      let LEVEL = 0;
      let LETTER = 0;
      
      const gameArea = document.getElementById("game-area");
      const keyboard = document.getElementById("keyboard");
      const wordle = document.getElementById("wordle");
      
      var date = new Date();
      var day = date.getDate();
      var month = date.getMonth() + 1;
      var year = date.getFullYear();
      var dateKey = day.toString() + month.toString() + year.toString();
      Math.seedrandom(dateKey);
      var randomNum = Math.floor(Math.random() * 1535) + 1;
      
      const THEWORD = lowerWords[randomNum].toUpperCase();
      // const THEWORD = lowerWords[Math.floor(Math.random() * lowerWords.length)].toUpperCase();
      // console.log(THEWORD);
      
      //setting up the game area
      for (let i = 0; i <= 5; i++) {
        for (let j = 0; j <= 4; j++) {
          const newDiv = document.createElement("div");
          newDiv.classList.add("row" + i);
          newDiv.classList.add("wordle-box");
          newDiv.id = "div" + i + j;
          const newSpan = document.createElement("span");
          newSpan.id = i + "-" + j;
          newDiv.appendChild(newSpan);
          gameArea.appendChild(newDiv);
        }
      }
      
      //add letter function which is called by the keyboard and when you click on the in game keyboard
      const addLetter = (letterEvent) => {
        const currLetter = document.getElementById(LEVEL + "-" + LETTER);
        currLetter.appendChild(letterEvent);
        const animateDiv = document.getElementById("div" + LEVEL + LETTER);
        animateDiv.classList.add("addLetter");
        setTimeout(() => {
          animateDiv.classList.remove("addLetter");
        }, "100");
        if (LETTER < 5) {
          LETTER++;
        }
      };
      //delete letter function called by the backspace and the clickable delete button
      const deleteLetter = () => {
        if (LETTER > 0) {
          LETTER--;
        }
        const deletedLetter = document.getElementById(LEVEL + "-" + LETTER);
        deletedLetter.innerText = "";
      };
      
      //setting up the keyboard
      for (let i = 0; i < letterArr.length; i++) {
        const newBtn = document.createElement("button");
        newBtn.classList.add("keyboard-btn");
        newBtn.id = "key" + letterArr[i];
        const letter = document.createTextNode(letterArr[i]);
        newBtn.appendChild(letter);
        keyboard.appendChild(newBtn);
      
        //adding event listeners to the keys
        newBtn.addEventListener("click", (e) => {
          if (e.target.id.length === 4) {
            const newGuess = document.createTextNode(e.target.innerText);
            addLetter(newGuess);
          }
        });
      }
      
      //adding event listener to the delete button
      const deleteBtn = document.getElementById("keyDEL");
      deleteBtn.addEventListener("click", (e) => {
        deleteLetter();
      });
      
      //the warning box that pops up
      const createWarning = (message) => {
        const warning = document.createElement("div");
        warning.innerText = message;
        wordle.appendChild(warning);
        warning.classList.add("warning-div");
        warning.classList.add("appear");
        setTimeout(() => {
          wordle.removeChild(warning);
        }, "3000");
      };
      
      //the animation that gets called when you make an illegal guess
      const shakeAnimation = () => {
        currRow = document.getElementsByClassName("row" + LEVEL);
        for (let i = 0; i < currRow.length; i++) {
          currRow[i].classList.add("shake");
        }
        setTimeout(() => {
          for (let i = 0; i < currRow.length; i++) {
            currRow[i].classList.remove("shake");
          }
        }, "400");
      };
      
      //the animation that gets called when you make a legal guess
      const animateRow = (colorArr) => {
        const currRow = document.getElementsByClassName("row" + LEVEL);
        for (let i = 0; i < 5; i++) {
          const milliseconds = i * 3 + "50";
          setTimeout(() => {
            currRow[i].classList.add(colorArr[i]);
          }, milliseconds);
          currRow[i].style.animationDelay = i * 3 + "00ms";
          currRow[i].classList.add("makeGuess");
        }
      };
      
      //the function that gets called when you make a guess. It sends legal guesses to the makeGuess function
      const guessFunction = () => {
        if (LETTER < 5) {
          shakeAnimation();
          createWarning("Nicht genügend Buchstaben.");
        } else if (LETTER === 5) {
          let currWord = "";
          for (let i = 0; i < LETTER; i++) {
            currWord += document.getElementById(LEVEL + "-" + i).innerText;
          }
          if (!lowerWords.includes(currWord.toLowerCase())) {
            shakeAnimation();
            createWarning("Wort nicht in der Liste.");
          } else {
            makeGuess(currWord);
          }
        }
      };
      
      //the function that compares your guess to the word and ends the game
      
      const makeGuess = (guess) => {
        const guessWordArr = guess.split("");
        const theWordArr = THEWORD.split("");
      
        let colorArr = [0, 1, 2, 3, 4];
      
        const letterCounts = {};
        // first, I make 2 arrays with sub arrays that have the letters and their iterations in the word, or the amount of times that letter has been guessed.
        theWordArr.forEach((element) => {
          letterCounts[element] = (letterCounts[element] || 0) + 1;
        });
      
        const mappedLetterCounts = Object.entries(letterCounts).map(
          ([key, value]) => [key, value]
        );
      
        let guessCounts = mappedLetterCounts.map((eachLetter) => {
          return [eachLetter[0], 0];
        });
      
        //GREEN
        for (let i = 0; i < 5; i++) {
          if (guessWordArr[i] === theWordArr[i]) {
            colorArr.splice(i, 1, "green");
      
            const letterToGreen = document.getElementById("key" + guessWordArr[i]);
            letterToGreen.classList.add("green-letter");
      
            guessCounts.forEach((eachLetter) => {
              if (eachLetter[0] === guessWordArr[i]) {
                eachLetter[1]++;
              }
            });
          }
        }
        //for every correct letter guess, I iterate the sub array with the corresponding letter.
      
        //YELLOW
        let currentGuessCount = 0;
        let maxGuessCount = 0;
      
        for (let i = 0; i < 5; i++) {
          if (theWordArr.includes(guessWordArr[i])) {
            //I then check the total amount of times the current letter appears in the guess array and compare it
            //to the total amount of times it appears in the word so that no extra boxes are made yellow.
            guessCounts.forEach((eachLetter) => {
              if (eachLetter[0] === guessWordArr[i]) {
                currentGuessCount = eachLetter[1];
              }
            });
      
            let index = mappedLetterCounts.findIndex(
              (subArr) => subArr[0] === guessWordArr[i]
            );
      
            mappedLetterCounts.forEach((eachLetter) => {
              if (eachLetter[0] === guessWordArr[i]) {
                maxGuessCount = eachLetter[1];
              }
            });
      
            if (currentGuessCount < maxGuessCount) {
              if (typeof colorArr[i] === "number") {
                colorArr.splice(i, 1, "yellow");
                guessCounts[index][1]++;
                const letterToYellow = document.getElementById(
                  "key" + guessWordArr[i]
                );
                letterToYellow.classList.add("yellow-letter");
              }
            }
          }
          //turning keys gray
          if (!theWordArr.includes(guessWordArr[i])) {
            const letterToGray = document.getElementById("key" + guessWordArr[i]);
            letterToGray.classList.add("gray");
          }
        }
        //This array sends the yellow and green classes to the animate function. It's a bit weird but it's what I thought of, and hey it works.
        animateRow(colorArr);
        //endgame messages
        if (guess === THEWORD) {
          if (LEVEL === 0) {
            createWarning("Unbelievable!");
          } else if (LEVEL === 1) {
            createWarning("Incredible!");
          } else if (LEVEL === 2) {
            createWarning("Stupendous!");
          } else if (LEVEL === 3) {
            createWarning("Bananas!");
          } else if (LEVEL === 4) {
            createWarning("Close one!");
          } else if (LEVEL === 5) {
            createWarning("Phew!");
          }
          const keyboard = document.getElementsByClassName("keyboard-btn");
          END = true;
        }
      
        LEVEL++;
        LETTER = 0;
      
        if (LEVEL === 6) {
          createWarning(THEWORD);
        }
      };
      
      if(END == false){
        //adding event listener to the enter button and the users keyboard
        const enterBtn = document.getElementById("keyENTER");
        enterBtn.addEventListener("click", guessFunction);
        
        window.addEventListener("keydown", (e) => {
          if (e.key === "Enter") {
            guessFunction();
          } else if (letterArr.includes(e.key.toUpperCase())) {
            const letter = document.createTextNode(e.key.toUpperCase());
            addLetter(letter);
          } else if (e.key === "Backspace") {
            deleteLetter();
          }
        });
      }