+def add_ansi_coloring(s):
+ if type(s) is list:
+ return [add_ansi_coloring(x) for x in s]
+
+ for u, c in [("#", 40), ("$", 31), ("@", 32)] + [(x, 36) for x in "aAbBcC"]:
+ s = s.replace(u, f"\u001b[{c}m{u}\u001b[0m")
+
+ return s
+
+
+def fusion_multi_lines(l, width_min=0):
+ l = [x if type(x) is list else [str(x)] for x in l]
+
+ def f(o, h):
+ w = max(width_min, max([len(r) for r in o]))
+ return [" " * w] * (h - len(o)) + [r + " " * (w - len(r)) for r in o]
+
+ h = max([len(x) for x in l])
+ l = [f(o, h) for o in l]
+
+ return "\n".join(["|".join([o[k] for o in l]) for k in range(h)])
+
+