<problem>
Write a function `get_words (s:str) -> List[str]` that extracts all the words from the input string `s`, changes them all to be lower case, and returns a list containing all unique words (no duplicates) in alphabetical order. Assume that a word is a maximal sequence of characters that does not contain any space. For example, `get_words("Hello World hello")` should return `['hello', 'world']`.

## Example Cases:
```
get_words("Hello World") => ['hello', 'world']
get_words("Hello World hello") => ['hello', 'world']
get_words("Hello World hello world") => ['hello', 'world']
get_words("Hello World H e l l o W o r l d") => ['d', 'e', 'h', 'hello', 'l', 'o', 'r', 'w', 'world']
get_words("A C B c b a") => ['a', 'b', 'c']
```
</problem>
<bug_code>
1. def get_words(s):
2.    words = [word.lower() for word in s.split(" ")]
3.    return sorted(words)
</bug_code>
<bug_desc>
The function returns a list of sorted words in alphabetical order, however, if `s` contains repeated words, the function returns all the words instead of removing the duplicated words in `s`.
</bug_desc>
<bug_fixes>
Replace `sorted(words)` with `sorted(set(words))` on line 3.
Insert a line with `words = set(words)`  after that insert another line with `words = list(set(words))` after line 2.
</bug_fixes>
<unit_tests>
assert get_words("Hello World") == ["hello", "world"]
assert get_words("Hello World hello") == ["hello", "world"]
assert get_words("Hello World hello world") == ["hello", "world"]
assert get_words("Hello World H e l l o W o r l d") == ['d', 'e', 'h', 'hello', 'l', 'o', 'r', 'w', 'world']
assert get_words('A C B c b a') == ['a', 'b', 'c']
</unit_tests>
<stu_desc>

</stu_desc>
<dialogue>
User: Hey! I made my `get_words(s)` function, but it's not working correctly. What should I do?
Assistant: Hello! Can you explain to me what the code on line 2 does?
	<alt>Let's review the problem description together. What are the requirements for the returned list?
	<alt>Does your code work for all the examples in the problem description or does it fail on some of them?
	<alt>>Can you walk me through your `get_words` function?
	<alt>Let's run through the examples in the problem description. What happens when you run `get_words("Hello World")` and `get_words("Hello World hello")`? What do you observe?
	<alt>Let's start with a simple example. Say you have a list of letters `['A', 'A', 'B']`. How would you remove the duplicate letters from the list and return a list of unique letters?
User: The code on line two is a single-line loop that will return the value of every word in lowercase.
	<alt>It returns a list of words.
Assistant: Can you insert a print statement to print the value of `words` before line 3?
	<alt>And what does line 3 accomplish?
	<alt>Where do you alphabetically sort the list provided?
User: Yes, for the input `"Hello World hello"` it returns `["hello", "world", "hello" ]`. Is that not correct?
	<alt>Oh, the problem wants me to return unique values only. I've fixed it, thank you!
<code>
1. def get_words(s):
2.    words = [word.lower() for word in s.split(" ")]
3.    return sorted(set(words))

</code>
Assistant: Let's review the problem description together. What are the requirements for the returned list?
	<alt>Let's look at the examples in the problem description. What happens when you run `get_words("Hello World hello")`? What should the output be?
User: Oh! I've fixed my code, I missed that in the problem. Thank you for the clarification!
<code>
1. def get_words(s):
2.    words = [word.lower() for word in s.split(" ")]
3.    return sorted(set(words))

</code>
Assistant: Any time! If you have any more questions, feel free to ask.
</dialogue>