from enum import Enum
from dataclasses import dataclass

class Etage(Enum):
	A = 0
	B = 1
	C = 2

@dataclass
class Etat:
	ascenseur: Etage = Etage.A
	bouton_A: bool = False
	bouton_B: bool = False
	bouton_C: bool = False

	def clone(self): return Etat(ascenseur=self.ascenseur, bouton_A=self.bouton_A, bouton_B=self.bouton_B, bouton_C=self.bouton_C)

def transition(etat: Etat, bouton_A: bool, bouton_B: bool, bouton_C: bool):
	if bouton_A: etat.bouton_A = True
	if bouton_B: etat.bouton_B = True
	if bouton_C: etat.bouton_C = True

	if etat.bouton_A:
		ascenseur = Etage.A
		etat.bouton_A = False

	elif etat.bouton_B:
		ascenseur = Etage.B
		etat.bouton_B = False

	elif etat.bouton_C:
		ascenseur = Etage.C
		etat.bouton_C = False

	return etat

def tout_bool():
	yield False
	yield True

def tout_etage():
	yield Etage.A
	yield Etage.B
	yield Etage.C

def tout_etat():
	for etage in tout_etage():
		for bouton_A in tout_bool():
			for bouton_B in tout_bool():
				for bouton_C in tout_bool():
					yield Etat(ascenseur=etage, bouton_A=bouton_A, bouton_B=bouton_B, bouton_C=bouton_C)

def tout_entree():
		for bouton_A in tout_bool():
			for bouton_B in tout_bool():
				for bouton_C in tout_bool():
					yield (bouton_A, bouton_B, bouton_C)

set_ = set()
for etat in tout_etat():
	transition_map = {}
	for entree in tout_entree():
		res = transition(etat.clone(), *entree)
		if str(res) not in transition_map: transition_map[str(res)] = []
		set_.add(str(etat) + " + " + str(entree) + "\n=> " + str(transition(etat, *entree)))


for line in set_:
	print(line + "\n")
