Problem:


博士の暗号

博  士 : ?D-C'KOPUA

ピーター : どうしたんですか、デビッド博士? わけのわからないことを叫ぶのにはもう慣れましたが、
        今日は文章にすらなっていませんよ。

博  士 : ほれ。

ピーター : なんですか? この表は......ああ、予選の問題にこんなのがありました。表を使って文字を置き換え
       ると文字数が減るんですよね。まさか予選と本選で同じ問題を出して手を抜こうって気じゃないでし
       ょうね。

博  士 : 逆じゃよ。

ピーター : 逆? なるほど、今度は短くした文字列を元に戻そうって問題ですか。ということは「?D-C'KOPUA」の
      文字を、この表を使って「文字」から「符号」に置きかえるんですね......できましたよ。

11111 00011 11101 00010 11110 01010 01110 01111 10100 00000

博  士 : うむ。次はこれじゃ。

ピーター : そうそう、こんな表もありましたね。これを逆に使うんだから「符号」から「文字」に置き換えればいい
          んですね。でも、最初は「11111」ですが表にありませんよ?

博     士 : そういうときは、もっと短くするか、後ろとつなげるかしてみるのだよ。

ピ ー タ ー : じゃあ短くして......あ、 「111」ならあります。じゃあ最初は「P」ですね。そうすると残りは「11」ですが、
            これはぴったり合うのがないから次の「00011」から 1 文字借りて「110」にすればいいんですね。

博     士 : そうそう。つまり「E」だね。

ピ ー タ ー : それで残るのが「0011」なので、これも次から借りて「00111」にして「T」と......。全部できました。最
          後の「0000」は捨てちゃえばいいんですよね?

博     士 : そうじゃ、よろしい。次はこれじゃ。

?D-C'?-C'-LMGZN?FNJKN- WEYN?P'QMRWLPZLKKTPOVRGDI

博     士 : さらにこれじゃ。

?P'QNPY?IXX?IXXK.BI -G?R'RPP'RPOVWDMW?SWUVG'-LCMGQ

博     士 : 仕上げにこうじゃ。

?P'QMDUEQ GADKOQ ?SWUVG'-LCMG?X?IGX,PUL.?UL.VNQQI

ピ ー タ ー : しっかし面倒だなあ。博士、今度は自分でプログラムを作って下さいよ。

  ということで、博士のかわりに、上の文章を置き換えるプログラムを作成してください。

Input

複数のデータセットが与えられます。各データセットとして、１つの文字列（表に含まれる文字からなる 200 文字以下の文字列）が１行に与えられます。入力の終わりまで処理してください。データセットの数は 200 を超えません。

Output

各データセットごとに、変換後の文字列を１行に出力してください。

Sample Input

?D-C'KOPUA

Output for the Sample Input

PETER POTTER



Sample input:
?D-C'KOPUA


Sample output:
PETER POTTER

Submission status: Accepted

Solution code:
encode = ["00000", "00001", "00010", "00011", "00100", "00101", "00110", "00111",
          "01000", "01001", "01010", "01011", "01100", "01101", "01110", "01111",
          "10000", "10001", "10010", "10011", "10100", "10101", "10110", "10111",
          "11000", "11001", "11010", "11011", "11100", "11101", "11110", "11111"]
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ .,-'?"
alphabet = list(alphabet)

decode = ["101", "000000", "000011", "10010001", "010001", "000001", "100101", "10011010",
          "0101", "0001", "110", "01001", "10011011", "010000", "0111", "10011000",
          "0110", "00100", "10011001", "10011110", "00101", "111", "10011111", "1000",
          "00110", "00111", "10011100", "10011101", "000010", "10010010", "10010011", "10010000"]
alphabet2 = " ',-.?ABCDEFGHIJKLMNOPQRSTUVWXYZ"
alphabet2 = list(alphabet2)


while 1:
    try:
        sentence = list(input())
    except EOFError:
        break

    list1 = []
    for sen in sentence:
        list1.append(encode[alphabet.index(sen)])
    sentence1 = ''.join(l for l in list1)
    sentence1 = list(sentence1)

    tmp = ""
    list2 = []
    while sentence1 != []:
        tmp += sentence1.pop(0)
        if tmp in decode:
            num = decode.index(tmp)
            list2.append(alphabet2[num])
            tmp = ""

    print(''.join(l for l in list2))

Submission status: Runtime Error

Solution code:
import sys

def f1(s): return "".join([d0[c] for c in s])

d0={"M":"10010","N":"10011"}
a="ABCD";
for i in range(4): d0[a[i]]=format(i,"02b")
a="EFGHIJKL"
for i in range(8): d0[a[i]]=format(i,"03b")
L0="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
L1=" ',-.?"
L2=" .,-'?"

d={}
a="J,EE,EH,MF,GF,EF,IJ,NG,BB,AB,K,BF,NH,GE,BD,NE,BC,"\
  "AI,NF,NK,AJ,L,NL,CA,AK,AL,NI,NJ,EG,MG,MH,ME".split(",")
for i,e in enumerate(a): d[f1(e)]=(L1+L0)[i]
for s0 in sys.stdin:
  s1="".join([format((L0+L2).index(c),"05b") for c in s0.strip()])
  s=""
  x=""
  for c in s1:
    try: x+=d[s]; s=""
    except: pass
    s+=c
  if s1="": print
  else: print x

Submission status: Runtime Error

Solution code:





table = {
	'A': '00000',
	'B': '00001',
	'C': '00010',
	'D': '00011',
	'E': '00100',
	'F': '00101',
	'G': '00110',
	'H': '00111',
	'I': '01000',
	'J': '01001',
	'K': '01010',
	'L': '01011',
	'M': '01111',
	'N': '10000',
	'O': '10001',
	'P': '10010',
	'Q': '10011',
	'R': '10100',
	'S': '10101',
	'T': '10111',
	'U': '11000',
	'V': '11001',
	'W': '11010',
	'X': '11011',
	'Y': '11100',
	'Z': '11101',
	' ': '11011',
	'.': '11111',
	',': '11100',
	'-': '11101',
	"'": '11110',
	'?': '11111',
	3: {
		'101': ' ',
		'110': 'E',
		'111': 'P',
	},
	4: {
		'0101': 'C',
		'0001': 'D',
		'0111': 'I',
		'0110': 'K',
		'1000': 'R',
	},
	5: {
		'F': '01001': 
		'L': '00100': 
		'O': '00101': 
		'S': '00110': 
		'T': '00111': 
	},
	6: {
		"'": '000000': 
		',': '000011': 
		'.': '010001': 
		'?': '000001': 
		'A': '100101': 
		'H': '010000': 
		'W': '000010': 
	}
	8: {
		'-': '10010001': 
		'B': '10011010': 
		'G': '10011011': 
		'J': '10011000': 
		'M': '10011001': 
		'N': '10011110': 
		'Q': '10011111': 
		'U': '10011100': 
		'V': '10011101': 
		'X': '10010010': 
		'Y': '10010011': 
		'Z': '10010000': 
	},
}

while True:
	try:
		s1 = input()
		s2 = ''
		s3 = ''
		for c1 in s:
			s2 += table[c]
		for l in (3, 4, 5, 6, 8):
			for c2 in table[l]:
				if s2.startswith(table[l][c2]):
					s2 = s2[l:]
					s3 += table[l][c2]
					if s2.find('1') < 0:
						break
		print(s3)
	except EOFError:
		break

Submission status: Runtime Error

Solution code:
table = {
	'A': '00000',
	'B': '00001',
	'C': '00010',
	'D': '00011',
	'E': '00100',
	'F': '00101',
	'G': '00110',
	'H': '00111',
	'I': '01000',
	'J': '01001',
	'K': '01010',
	'L': '01011',
	'M': '01111',
	'N': '10000',
	'O': '10001',
	'P': '10010',
	'Q': '10011',
	'R': '10100',
	'S': '10101',
	'T': '10111',
	'U': '11000',
	'V': '11001',
	'W': '11010',
	'X': '11011',
	'Y': '11100',
	'Z': '11101',
	' ': '11011',
	'.': '11111',
	',': '11100',
	'-': '11101',
	"'": '11110',
	'?': '11111',
	3: {
		'101': ' ',
		'110': 'E',
		'111': 'P',
	},
	4: {
		'0101': 'C',
		'0001': 'D',
		'0111': 'I',
		'0110': 'K',
		'1000': 'R',
	},
	5: {
		'01001': 'F',
		'00100': 'L',
		'00101': 'O',
		'00110': 'S',
		'00111': 'T',
	},
	6: {
		'000000': "'",
		'000011': ',',
		'010001': '.',
		'000001': '?',
		'100101': 'A',
		'010000': 'H',
		'000010': 'W',
	}
	8: {
		'10010001': '-',
		'10011010': 'B',
		'10011011': 'G',
		'10011000': 'J',
		'10011001': 'M',
		'10011110': 'N',
		'10011111': 'Q',
		'10011100': 'U',
		'10011101': 'V',
		'10010010': 'X',
		'10010011': 'Y',
		'10010000': 'Z',
	},
}

while True:
	try:
		s1 = input()
		s2 = ''
		s3 = ''
		for c1 in s:
			s2 += table[c]
		for l in (3, 4, 5, 6, 8):
			for c2 in table[l]:
				if s2.startswith(table[l][c2]):
					s2 = s2[l:]
					s3 += table[l][c2]
			if s2.find('1') < 0:
				break
		print(s3)
	except EOFError:
		break

Submission status: Runtime Error

Solution code:
table = {
	'A': '00000',
	'B': '00001',
	'C': '00010',
	'D': '00011',
	'E': '00100',
	'F': '00101',
	'G': '00110',
	'H': '00111',
	'I': '01000',
	'J': '01001',
	'K': '01010',
	'L': '01011',
	'M': '01111',
	'N': '10000',
	'O': '10001',
	'P': '10010',
	'Q': '10011',
	'R': '10100',
	'S': '10101',
	'T': '10111',
	'U': '11000',
	'V': '11001',
	'W': '11010',
	'X': '11011',
	'Y': '11100',
	'Z': '11101',
	' ': '11011',
	'.': '11111',
	',': '11100',
	'-': '11101',
	"'": '11110',
	'?': '11111',
	3: {
		'101': ' ',
		'110': 'E',
		'111': 'P',
	},
	4: {
		'0101': 'C',
		'0001': 'D',
		'0111': 'I',
		'0110': 'K',
		'1000': 'R',
	},
	5: {
		'01001': 'F',
		'00100': 'L',
		'00101': 'O',
		'00110': 'S',
		'00111': 'T',
	},
	6: {
		'000000': "'",
		'000011': ',',
		'010001': '.',
		'000001': '?',
		'100101': 'A',
		'010000': 'H',
		'000010': 'W',
	},
	8: {
		'10010001': '-',
		'10011010': 'B',
		'10011011': 'G',
		'10011000': 'J',
		'10011001': 'M',
		'10011110': 'N',
		'10011111': 'Q',
		'10011100': 'U',
		'10011101': 'V',
		'10010010': 'X',
		'10010011': 'Y',
		'10010000': 'Z',
	},
}

while True:
	try:
		s1 = input()
		s2 = ''
		s3 = ''
		for c1 in s:
			s2 += table[c]
		for l in (3, 4, 5, 6, 8):
			for c2 in table[l]:
				if s2.startswith(table[l][c2]):
					s2 = s2[l:]
					s3 += table[l][c2]
			if s2.find('1') < 0:
				break
		print(s3)
	except EOFError:
		break

Submission status: Runtime Error

Solution code:
# -*- coding: utf-8 -*-

import sys
import os
import math
import re

tableA = {
        "A":"00000",
        "B":"00001",
        "C":"00010",
        "D":"00011",
        "E":"00100",
        "F":"00101",
        "G":"00110",
        "H":"00111",
        "I":"01000",
        "J":"01001",
        "K":"01010",
        "L":"01011",
        "M":"01100",
        "N":"01101",
        "O":"01110",
        "P":"01111",
        "Q":"10000",
        "R":"10001",
        "S":"10010",
        "T":"10011",
        "U":"10100",
        "V":"10101",
        "W":"10110",
        "X":"10111",
        "Y":"11000",
        "Z":"11001",
        " ":"11010",
        ".":"11011",
        ",":"11100",
        "-":"11101",
        "'":"11110",
        "?":"11111"}

tableB = {
        "101":" ",
        "000000":"'",
        "000011":",",
        "10010001":"-",
        "010001":".",
        "000001":"?",
        "100101":"A",
        "10011010":"B",
        "0101":"C",
        "0001":"D",
        "110":"E",
        "01001":"F",
        "10011011":"G",
        "010000":"H",
        "0111":"I",
        "10011000":"J",
        "0110":"K",
        "00100":"L",
        "10011001":"M",
        "10011110":"N",
        "00101":"O",
        "111":"P",
        "10011111":"Q",
        "1000":"R",
        "00110":"S",
        "00111":"T",
        "10011100":"U",
        "10011101":"V",
        "000010":"W",
        "10010010":"X",
        "10010011":"Y",
        "10010000":"Z"}

for s in sys.stdin:
    lst = []
    for c in s:
        lst.append(tableA[c])
    s = ''.join(lst)
    #print('encoded', s)

    tmp, ans = '', ''
    for c in s:
        tmp += c
        if tmp in tableB:
            ans += tableB[tmp]
            tmp = ''
    print(ans)

Submission status: Runtime Error

Solution code:
# -*- coding: utf-8 -*-

import sys
import os
import math
import re
import random

input_text_path = __file__.replace('.py', '.txt')
fd = os.open(input_text_path, os.O_RDONLY)
os.dup2(fd, sys.stdin.fileno())

tableA = {
    "A": "00000",
    "B": "00001",
    "C": "00010",
    "D": "00011",
    "E": "00100",
    "F": "00101",
    "G": "00110",
    "H": "00111",
    "I": "01000",
    "J": "01001",
    "K": "01010",
    "L": "01011",
    "M": "01100",
    "N": "01101",
    "O": "01110",
    "P": "01111",
    "Q": "10000",
    "R": "10001",
    "S": "10010",
    "T": "10011",
    "U": "10100",
    "V": "10101",
    "W": "10110",
    "X": "10111",
    "Y": "11000",
    "Z": "11001",
    " ": "11010",
    ".": "11011",
    ",": "11100",
    "-": "11101",
    "'": "11110",
    "?": "11111"}

tableB = {
    "101": " ",
    "000000": "'",
    "000011": ",",
    "10010001": "-",
    "010001": ".",
    "000001": "?",
    "100101": "A",
    "10011010": "B",
    "0101": "C",
    "0001": "D",
    "110": "E",
    "01001": "F",
    "10011011": "G",
    "010000": "H",
    "0111": "I",
    "10011000": "J",
    "0110": "K",
    "00100": "L",
    "10011001": "M",
    "10011110": "N",
    "00101": "O",
    "111": "P",
    "10011111": "Q",
    "1000": "R",
    "00110": "S",
    "00111": "T",
    "10011100": "U",
    "10011101": "V",
    "000010": "W",
    "10010010": "X",
    "10010011": "Y",
    "10010000": "Z"}

def my_solve(s):
    lst = []
    for c in s:
        lst.append(tableA[c])
    s = ''.join(lst)

    tmp, ans = '', ''
    for c in s:
        tmp += c
        if tmp in tableB:
            ans += tableB[tmp]
            tmp = ''
    return ans

while True:
    try:
        s = input()
    except:
        break

    print(my_solve(s))