Word Thing Create a non-static class named 'WordThing' in its own file. The class should contain a single constructor that takes a single string as its argument. The constructor should store the value of the submitted string in an internal class variable (which, along with any other internal variables in the class, should be private). You may assume that the submitted string will contain only uppercase and/or lowercase letters (no spaces, numbers, punctuation, etc.). The method 'main' and the keyword 'static' must not appear anywhere in the 'WordThing' class. The class should contain the following public methods: displayWord Arguments: None Displays: The "active" word (by itself, on its own line) Returns: Nothing ------------- countLetters Arguments: None Displays: Nothing Returns: An integer equal to the number of characters in the "active" word ------------- reverseWord Arguments: None Displays: Nothing Returns: A string containing the characters in the "active" word in reverse order (you must use a 'for' loop) ------------- changeWord Arguments: A single string Actions: Changes the "active" word to the new input Displays: Nothing Returns: Nothing Advanced Option #1 To the 'WordThing' class, add another public method named 'alphabetize' that returns a string containing the letters in the "active" word in alphabetical order (ignoring case). Advanced Option #2 To the 'WordThing' class, add another public method named 'variations' that returns an ArrayList of strings of all of the different permutations of the letters in the "active" word. So, for example, if the word is "cat", then your method should return an ArrayList consisting of these six strings: "cat", "cta", "act", "atc", "tac", and "tca". If a word contains more than one of the same letter (e.g., "animal", "cook", "situation"), make sure your returned ArrayList does not contain any duplicate entries. So, for example, for the word "too", your method should return an ArrayList that has only three words in it: "too", "oot", and "oto".