// D (compile time)
// $ dmd -J`pwd` -o- A.d 2> out.txt
import std.conv;
import std.string;
string solveAll(string s)
{
return s.splitLines().solveEach(1);
}
string solveEach(string[] lines, int i)
{
if( i == lines.length )
return "";
return text("Case #", i, ": ", solve(lines[i]), "\n", lines.solveEach(i+1));
}
string constructTable(string before, string after)
{
char[char.max+1] map;
foreach(ref c; map) c = '*';
foreach(i; 0..before.length)
map[after[i]] = before[i];
return text('"', map, '"');
}
string solve(string s)
{
string t;
foreach(c; s)
t ~= mixin(constructTable(
"
our language is impossible to understand
there are twenty six factorial possibilities
so it is okay if you want to just give up
a zooq
",
"
ejp mysljylc kd kxveddknmc re jsicpdrysi
rbcpc ypc rtcsra dkh wyfrepkym veddknkmkrkcd
de kr kd eoya kw aej tysr re ujdr lkgc jv
y qeez
" ))[c];
return t;
}
immutable inputFileName = "A.in";
version(RunTime)
{
import std.file, std.stdio;
void main() { inputFileName.readText().solveAll().write(); }
}
else
{
pragma(msg, import(inputFileName).solveAll());
}
Ly8gRCAoY29tcGlsZSB0aW1lKQovLyAgICQgZG1kIC1KYHB3ZGAgLW8tIEEuZCAyPiBvdXQudHh0CmltcG9ydCBzdGQuY29udjsKaW1wb3J0IHN0ZC5zdHJpbmc7CgpzdHJpbmcgc29sdmVBbGwoc3RyaW5nIHMpCnsKCXJldHVybiBzLnNwbGl0TGluZXMoKS5zb2x2ZUVhY2goMSk7Cn0KCnN0cmluZyBzb2x2ZUVhY2goc3RyaW5nW10gbGluZXMsIGludCBpKQp7CglpZiggaSA9PSBsaW5lcy5sZW5ndGggKQoJCXJldHVybiAiIjsKCXJldHVybiB0ZXh0KCJDYXNlICMiLCBpLCAiOiAiLCBzb2x2ZShsaW5lc1tpXSksICJcbiIsIGxpbmVzLnNvbHZlRWFjaChpKzEpKTsKfQoKc3RyaW5nIGNvbnN0cnVjdFRhYmxlKHN0cmluZyBiZWZvcmUsIHN0cmluZyBhZnRlcikKewoJY2hhcltjaGFyLm1heCsxXSBtYXA7Cglmb3JlYWNoKHJlZiBjOyBtYXApIGMgPSAnKic7CgoJZm9yZWFjaChpOyAwLi5iZWZvcmUubGVuZ3RoKQoJCW1hcFthZnRlcltpXV0gPSBiZWZvcmVbaV07CglyZXR1cm4gdGV4dCgnIicsIG1hcCwgJyInKTsKfQoKc3RyaW5nIHNvbHZlKHN0cmluZyBzKQp7CglzdHJpbmcgdDsKCWZvcmVhY2goYzsgcykKCQl0IH49IG1peGluKGNvbnN0cnVjdFRhYmxlKAoiCm91ciBsYW5ndWFnZSBpcyBpbXBvc3NpYmxlIHRvIHVuZGVyc3RhbmQKdGhlcmUgYXJlIHR3ZW50eSBzaXggZmFjdG9yaWFsIHBvc3NpYmlsaXRpZXMKc28gaXQgaXMgb2theSBpZiB5b3Ugd2FudCB0byBqdXN0IGdpdmUgdXAKYSB6b29xCiIsCiIKZWpwIG15c2xqeWxjIGtkIGt4dmVkZGtubWMgcmUganNpY3BkcnlzaQpyYmNwYyB5cGMgcnRjc3JhIGRraCB3eWZyZXBreW0gdmVkZGtua21rcmtjZApkZSBrciBrZCBlb3lhIGt3IGFlaiB0eXNyIHJlIHVqZHIgbGtnYyBqdgp5IHFlZXoKIgkJKSlbY107CglyZXR1cm4gdDsKfQoKaW1tdXRhYmxlIGlucHV0RmlsZU5hbWUgPSAiQS5pbiI7Cgp2ZXJzaW9uKFJ1blRpbWUpCnsKCWltcG9ydCBzdGQuZmlsZSwgc3RkLnN0ZGlvOwoJdm9pZCBtYWluKCkgeyBpbnB1dEZpbGVOYW1lLnJlYWRUZXh0KCkuc29sdmVBbGwoKS53cml0ZSgpOyB9Cn0KZWxzZQp7CglwcmFnbWEobXNnLCBpbXBvcnQoaW5wdXRGaWxlTmFtZSkuc29sdmVBbGwoKSk7Cn0K