import re
P = [ 'abcde' , 'baedc' , 'cdaeb' , 'dbaec' , 'edbca' ]
N = len ( P)
next = lambda x: chr ( ord ( x) +1 )
h2h_winner = lambda x, y, w: x if sum ( [ w[ i] for i in range ( N) if re .match ( '.*' + x + '.*' + y + '.*' , P[ i] ) ] ) > N/2 else y
winner = lambda x, y, w: h2h_winner( x, y, w) if y == chr ( ord ( 'a' ) +N-1 ) else h2h_winner( winner( x, next( y) , w) , winner( y, next( y) , w) , w)
w = [ 1 ] * N
print "Winner:" , winner( 'a' , 'b' , w)
w[ 0 ] = 0
for i in range ( 1 , N) :
w[ i] = 2
print "Winner if a's vote is transferred to" , chr ( ord ( 'a' ) +i) + ":" , winner( 'a' , 'b' , w)
w[ i] = 1
aW1wb3J0IHJlCgpQID0gWydhYmNkZScsICdiYWVkYycsICdjZGFlYicsICdkYmFlYycsICdlZGJjYSddCk4gPSBsZW4oUCkKCm5leHQgPSBsYW1iZGEgeDogY2hyKG9yZCh4KSsxKQpoMmhfd2lubmVyID0gbGFtYmRhIHgsIHksIHc6IHggaWYgc3VtKFt3W2ldIGZvciBpIGluIHJhbmdlKE4pIGlmIHJlLm1hdGNoKCcuKicgKyB4ICsgJy4qJyArIHkgKyAnLionLCBQW2ldKV0pID4gTi8yIGVsc2UgeQp3aW5uZXIgPSBsYW1iZGEgeCwgeSwgdzogaDJoX3dpbm5lcih4LCB5LCB3KSBpZiB5ID09IGNocihvcmQoJ2EnKStOLTEpIGVsc2UgaDJoX3dpbm5lcih3aW5uZXIoeCwgbmV4dCh5KSwgdyksIHdpbm5lcih5LCBuZXh0KHkpLCB3KSwgdykKCncgPSBbMV0gKiBOCnByaW50ICJXaW5uZXI6Iiwgd2lubmVyKCdhJywgJ2InLCB3KQp3WzBdID0gMApmb3IgaSBpbiByYW5nZSgxLCBOKToKICB3W2ldID0gMgogIHByaW50ICJXaW5uZXIgaWYgYSdzIHZvdGUgaXMgdHJhbnNmZXJyZWQgdG8iLCBjaHIob3JkKCdhJykraSkgKyAiOiIsIHdpbm5lcignYScsICdiJywgdykKICB3W2ldID0gMQo=