#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (c) 2014-2018 Hugh Pyle

# print big letters on paper tape


import sys


# emoji to print in binary
HEART_EMOJI = u'\u2764\ufe0f'

# How many nulls before and after the print
LEAD = 10

tape_chars = {
    0x20: [0, 0],
    0x21: [0b10111],
    0x22: [0b00011, 0b00000, 0b00011],
    0x23: [0b01010, 0b11111, 0b01010, 0b11111, 0b01010],
    0x24: [0b10010, 0b10101, 0b11111, 0b10101, 0b01000],
    0x25: [0b10011, 0b01011, 0b00100, 0b11010, 0b11001],
    0x26: [0b01010, 0b10101, 0b10110, 0b01000, 0b10100],
    0x27: [0b00000, 0b00011],
    0x28: [0b01110, 0b10001],
    0x29: [0b10001, 0b01110],
    0x2a: [0b00110, 0b00110],
    0x2b: [0b00100, 0b00100, 0b11110, 0b00100, 0b00100],
    0x2c: [0b100000, 0b10000],
    0x2d: [0b00100, 0b00100, 0b00100],
    0x2e: [0b10000],
    0x2f: [0b10000, 0b01000, 0b00100, 0b00010, 0b00001],
    0x30: [0b01110, 0b10001, 0b10001, 0b01110],
    0x31: [0b00010, 0b11111],
    0x32: [0b11010, 0b10101, 0b10101, 0b10010],
    0x33: [0b10001, 0b10101, 0b10101, 0b01010],
    0x34: [0b00111, 0b00100, 0b00100, 0b11110],
    0x35: [0b10111, 0b10101, 0b10101, 0b01001],
    0x36: [0b01110, 0b10101, 0b10101, 0b01000],
    0x37: [0b10001, 0b01001, 0b00101, 0b00011],
    0x38: [0b01010, 0b10101, 0b10101, 0b01010],
    0x39: [0b10010, 0b10101, 0b10101, 0b01110],
    0x3a: [0b10010],
    0x3b: [0b100000, 0b10010],
    0x3c: [0b00100, 0b01010, 0b10001], 
    0x3d: [0b01010, 0b01010, 0b01010, 0b01010],
    0x3e: [0b10001, 0b01010, 0b00100],
    0x3f: [0b00010, 0b11001, 0b00101, 0b00010],
    0x40: [0b01110, 0b10001, 0b10111, 0b10111, 0b00110],
    0x41: [0b11110, 0b00101, 0b00101, 0b11110],             # A
    0x42: [0b11111, 0b10101, 0b10101, 0b01010],
    0x43: [0b01110, 0b10001, 0b10001, 0b10001],
    0x44: [0b11111, 0b10001, 0b10001, 0b01110],
    0x45: [0b11111, 0b10101, 0b10101, 0b10001],
    0x46: [0b11111, 0b00101, 0b00101, 0b00001],
    0x47: [0b01110, 0b10001, 0b10101, 0b11101],
    0x48: [0b11111, 0b00100, 0b00100, 0b11111],
    0x49: [0b11111],
    0x4a: [0b01000, 0b10000, 0b01111],
    0x4b: [0b11111, 0b00100, 0b01010, 0b10001],
    0x4c: [0b11111, 0b10000, 0b10000],
    0x4d: [0b11111, 0b00010, 0b00100, 0b00010, 0b11111],
    0x4e: [0b11111, 0b00010, 0b00100, 0b11111],
    0x4f: [0b01110, 0b10001 ,0b10001, 0b10001, 0b01110],
    0x50: [0b11111, 0b00101, 0b00101, 0b00010],
    0x51: [0b01110, 0b10001, 0b10101, 0b11001, 0b11110],
    0x52: [0b11111, 0b00101, 0b00101, 0b11010],
    0x53: [0b10010, 0b10101, 0b10101, 0b01000],
    0x54: [0b00001, 0b00001, 0b11111, 0b00001, 0b00001],
    0x55: [0b01111, 0b10000, 0b10000, 0b01111],
    0x56: [0b00011, 0b01100, 0b10000, 0b01100, 0b00011],
    0x57: [0b00111, 0b11000, 0b00110, 0b11000, 0b00111],
    0x58: [0b11011, 0b00100, 0b00100, 0b11011],
    0x59: [0b00011, 0b00100, 0b11000, 0b00100, 0b00011],
    0x5a: [0b11001, 0b10101, 0b10101, 0b10011],                 # Z
    0x5b: [0b11111, 0b10001],
    0x5c: [0b00001, 0b00010, 0b00100, 0b01000, 0b10000],
    0x5d: [0b10001, 0b11111],
    0x5e: [0b00010, 0b00001, 0b00010],
    0x5f: [0b10000 ,0b10000, 0b10000],
    0x60: [0b00001, 0b00010],
    0x61: [0b01100, 0b10010, 0b10010, 0b11110],                 # a
    0x62: [0b11111, 0b10010 ,0b10010, 0b01100],
    0x63: [0b01100, 0b10010, 0b10010],
    0x64: [0b01100, 0b10010, 0b10010, 0b11111],
    0x65: [0b01100, 0b10110, 0b10110, 0b10100],
    0x66: [0b11110, 0b00101, 0b00001],
    0x67: [0b100100, 0b101010, 0b101010, 0b011110],
    0x68: [0b11111, 0b00010, 0b00010, 0b11100],
    0x69: [0b11101],
    0x6a: [0b100000, 0b011101],
    0x6b: [0b11111, 0b00100, 0b00100, 0b01010, 0b10000],
    0x6c: [0b01111, 0b10000],
    0x6d: [0b11110, 0b00010, 0b11110, 0b00010, 0b11100],
    0x6e: [0b11110, 0b00010, 0b00010, 0b11100],
    0x6f: [0b01100, 0b10010, 0b10010, 0b10010, 0b01100],
    0x70: [0b111110, 0b10010, 0b10010, 0b01100],
    0x71: [0b01100, 0b10010, 0b10010, 0b111110],
    0x72: [0b11100, 0b00010, 0b00010],
    0x73: [0b10100, 0b10110, 0b01010],
    0x74: [0b01111, 0b10010, 0b10010],
    0x75: [0b01110, 0b10000, 0b10000, 0b11110],
    0x76: [0b00110, 0b01000, 0b10000, 0b01000, 0b00110],
    0x77: [0b01110, 0b11000, 0b00110, 0b11000, 0b01110],
    0x78: [0b11010, 0b00100, 0b00100, 0b11010],
    0x79: [0b100110, 0b11000, 0b01000, 0b00110],
    0x7a: [0b10010, 0b11010, 0b10110, 0b10010],                 # z
    0x7b: [0b00100, 0b11011, 0b10001],
    0x7c: [0b11111],
    0x7d: [0b10001, 0b11011, 0b00100],
    0x7e: [0b00010, 0b00001, 0b00010, 0b00001],
    0x7f: [0, 0]
}

PRINT_CHAR = "o"

def print_all():
    bit=1
    while bit<64:
        t = ""
        for (k,v) in tape_chars.items():
            for col in v:
                if col & bit:
                    c = PRINT_CHAR
                else:
                    c = " "
                pass
                t = t + c
            t = t + "  "
        print(t)
        bit = bit * 2

def print_string(s):
    bit=1
    while bit<64:
        t = ""
        for char in s:
            v = tape_chars.get(ord(char), 0)
            for col in v:
                if col & bit:
                    c = PRINT_CHAR
                else:
                    c = " "
                pass
                t = t + c
            t = t + "  "
        if bit==4:
            print("." * len(t))
        print(t)
        bit = bit * 2

def print_binary(s):
    sys.stdout.write(chr(0) * LEAD)
    sys.stdout.write(u"{}".format(HEART_EMOJI))
    sys.stdout.write(chr(0) * LEAD)
    for char in s:
        v = tape_chars.get(ord(char), 0)
        for col in v:
            t = 0
            bit = 1
            while bit < 64:
                t = t | (col & bit)<<1
                bit = bit * 2
            sys.stdout.write(chr(t))
        sys.stdout.write(chr(0))
    sys.stdout.write(chr(0) * LEAD)


def main(label):
    print_binary(label)


main(" ".join(sys.argv[1:]))

