<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: And what does line 3 accomplish?
	<alt>Where do you alphabetically sort the list provided?
	<alt>Can you print the value of words before line 3?
User: It sorts the values in `words` alphabetically.
Assistant: Can you explain what the problem wants you to return?
	<alt>Where do you remove duplicate values from words?
	<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?
User: Oh! The problem wants me to return a sorted list without duplicates. Is there a given function to do that?
	<alt>Oh! The problem wants me to return a list with no duplicates! I've fixed it now, thank you!
<code>
1. def get_words(s):
2.    words = [word.lower() for word in s.split(" ")]
3.    return sorted(set(words))

</code>
Assistant: I feel like the best way to describe this would be to enforce a math concept. What do you call a mathematical collection without duplicates?
	<alt>Let's recollect what we know about data structures. Which data structure in Python would store unique elements only?
	<alt>Is there a data structure in Python that stores unique elements only?
	<alt>Where can you learn about deduplicating a list in Python?
User: Oh, a set! I figured it out, thank you!
<code>
1. def get_words(s):
2.    words = [word.lower() for word in s.split(" ")]
3.    return sorted(set(words))

</code>
Assistant: No problem! If you have any more issues, please feel free to talk about them now or later.
</dialogue>