python: my code is meant to decode words but I can not find all the possible solutions

I have a "solution" to a problem but I am not satisfied with it. First I will ask the question, I will show my solution and then I will explain my problems with my solution.

Question:
In a computer network, data must be transmitted between different nodes (devices). Unfortunately, this is not an error test
process. Transmission problems can distort a message and cause errors in the received data. Luckily, the errors are
(usually) distributed randomly, so they will occur in different places each time a message is transmitted. Transmitting
The same message several times and comparing the results, we can collect data that will help us to reconstruct the original.
message. To do this, we examine each position of each message copy. The value that occurs most frequently in a given
position is (usually) the correct value for that position.
For example, consider the following repeated / retransmitted message (in this example, spaces have been inserted between
each letter for clarity):

f e l n o w o w l l

h e j w o a p r o d

g e l q h w k b p y

h p r s e w o r l d

h e l b m o r l d

h e g l o x l r h d

h h l l or w e r k u

h t l k w w x s l d

In the first column / position, we have 1 f, 1 g and 6 h. Since "h" is the most common value for the first letter, we can guess
that the first letter of the original message was probably "h". The second position has 5 e's, 1 h, 1 p, and 1 t, so "e" is the
most likely second character. Repeat this process for each position in the copies of the message. In this case, the original message.
It turns out to be "helloworld".
Complete the recoverMessage () function, which takes a list of strings of equal length as its only argument. Can
assume that each string ONLY contains lowercase letters; No spaces, digits, capitals or punctuation
Symbols in any of the source strings The function returns a single string whose length is equal to that of any of the source strings.
source chains.

My solution:

Recovery message (x):
Alphabet = {"a": 0, "b": 0, "c": 0, "d": 0, "e": 0, "f": 0, "g": 0, "h": 0 , "i": 0,
"j": 0, "k": 0, "l": 0, "m": 0, "n": 0, "o": 0, "p": 0, "q": 0, "r ": 0," s ": 0," t ": 0,
"u": 0, "v": 0, "w": 0, "x": 0, "y": 0, "z": 0}
unscrambled = ""
sidestring = ""
for i in range (len (x[0])):
for j in range (len (x)):
alphabet[x[j][i]]= alphabet[x[j][i]]+ 1
y = max (alphabet.values ​​())
For letters in alphabet:
if alphabet.get (letters) == y:
sidestring = sidestring + letters
deciphered = deciphered + side chain[0]

    sidestring = ""
Alphabet = {"a": 0, "b": 0, "c": 0, "d": 0, "e": 0, "f": 0, "g": 0, "h": 0 , "i": 0,
"j": 0, "k": 0, "l": 0, "m": 0, "n": 0, "o": 0, "p": 0, "q": 0, "r ": 0," s ": 0," t ": 0,
"u": 0, "v": 0, "w": 0, "x": 0, "y": 0, "z": 0}

return (decryption)

The problem I have with my solution is that it does not generate all the possible solutions. For example, if you do this manually for the call to the function

retrieve message["citputejncienje", "cebautersmjynzt",

"comcntewsciunwb", "foxuuterscienfe",
"jomvuzerociiavn", "tojeotesstfdiqe",
"computezsciryce"])

you should get computer centennial or
Computer's science. My problem is in my code. I enter the function max. But it could be a draw. How can I save all these letters that come in a draw and show all the "right" words possible?