#!/usr/bin/env python3

import string

LOWERCASE_OFFSET = ord("a")
ALPHABET = string.ascii_lowercase[:16]

flag = "mlnklfnknljflfjljnjijjmmjkmljnjhmhjgjnjjjmmkjjmijhmkjhjpmkmkmljkjijnjpmhmjjgjj"

def b16_decode(enc):
    dec = ""
    for i in range(0, len(enc), 2):
        first = "{0:04b}".format(ALPHABET.index(enc[i]))
        second = "{0:04b}".format(ALPHABET.index(enc[i + 1]))
        dec += chr(int(first + second, 2))
    return dec

def unshift(c, k):
    t1 = ord(c) - LOWERCASE_OFFSET
    t2 = ord(k) - LOWERCASE_OFFSET
    return ALPHABET[(t1 - t2) % len(ALPHABET)]


def main():
    for key in ALPHABET:
        unenc = ""
        for i, c in enumerate(flag):
            unenc += unshift(c, key[i % len(key)])
        unshifted = ''.join(unshift(c, key) for c in flag)

        # NOTE: key is 'g', "et tu?" is a caesar reference.
        #       Remove the if statement to see all outpus for all keys
        if key == 'g':
            print(f'picoCTF{{{b16_decode(unenc)}}}')

if __name__ == "__main__":
    main()