from itertools import permutations as perms
from itertools import product


class miracle:
	'''
		i make numerical miracles 
	'''
	def __init__(self):
		self.ops = ['+', '-', '*', '/']
		self.nums = [21, 4, 13, 5, 1]
		self.miracle_value = 55
		self.min_length = len(self.nums)
		self.max_length = self.min_length + 7

	def _zip(self, a, b):
		max_len = max(len(a), len(b))
		a = list(a)+['']*(max_len-len(a))
		b = list(b)+['']*(max_len-len(b))
		return zip(a,b)

	def merge_pair(self, nums, ops):
		res = []
		for i, j in self._zip(nums, ops):
			res.append(str(i)+j)
		return ''.join(res)

	def gen_pair(self, length=3):
		_nums = perms(self.nums, length)
		_ops = product(self.ops, repeat=length-1)
		return list(_nums), list(_ops)

	def get_pop(self, length=3):
		res = []
		nums_arrs, ops_arrs = self.gen_pair(length=length)
		for ops_arr in ops_arrs:
			for nums_arr in nums_arrs:
				res.append(self.merge_pair(nums_arr, ops_arr))
		return res

	def fire(self, ):
		for length in range(2, self.max_length):
			print(self.filter_calcs(self.get_pop(length=length)))

	def filter_calcs(self, exps):
		res = {}
		for exp in exps:
			try:
				value = eval(exp)
				if value==self.miracle_value:
					res[exp] = value
			except:
				pass
		return res

if __name__ == '__main__':

	main = miracle()

	print(main.fire())