/* package whatever; // don't place package name! */
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone {
private static final String[] keys
; private static final String[] values
;
static {
String alphabet
= "abcdefghijklmnopqrstuvwxyz"; keys
= new String[alphabet.
length()]; values
= new String[alphabet.
length()]; for (int i = 0; i < alphabet.length(); i++) {
keys
[i
] = String.
valueOf(i
+ 1); values[i] = alphabet.substring(i, i + 1);
}
}
public static List
<String
> decode
(String input
) { List<String> results = new ArrayList<>();
decodeRecursive(input, "", results);
return results;
}
private static void decodeRecursive
(String input,
String current, List
<String
>results
) { if (input.length() == 0) {
results.add(current);
return;
}
for (int i = 0; i < keys.length; i++) {
if (input.startsWith(key)) {
decodeRecursive(input.substring(key.length()), current + values[i], results);
}
}
}
public static void main
(String[] args
) { String decoded
= decode
(encoded
).
stream().
collect(Collectors.
joining("\n ")); System.
out.
printf("Input %s decodes as:\n %s\n", encoded, decoded
); }
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBJZGVvbmUgewogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10ga2V5czsKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHZhbHVlczsKICAgIAogICAgc3RhdGljIHsKICAgICAgICBTdHJpbmcgYWxwaGFiZXQgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOwogICAgICAgIGtleXMgPSBuZXcgU3RyaW5nW2FscGhhYmV0Lmxlbmd0aCgpXTsKICAgICAgICB2YWx1ZXMgPSBuZXcgU3RyaW5nW2FscGhhYmV0Lmxlbmd0aCgpXTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFscGhhYmV0Lmxlbmd0aCgpOyBpKyspIHsKICAgICAgICAgICAga2V5c1tpXSA9IFN0cmluZy52YWx1ZU9mKGkgKyAxKTsKICAgICAgICAgICAgdmFsdWVzW2ldID0gYWxwaGFiZXQuc3Vic3RyaW5nKGksIGkgKyAxKTsKICAgICAgICB9CiAgICB9CgogICAgCiAgICBwdWJsaWMgc3RhdGljIExpc3Q8U3RyaW5nPiBkZWNvZGUoU3RyaW5nIGlucHV0KSB7CiAgICAgICAgTGlzdDxTdHJpbmc+IHJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICBkZWNvZGVSZWN1cnNpdmUoaW5wdXQsICIiLCByZXN1bHRzKTsKICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KICAgIAogICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkZWNvZGVSZWN1cnNpdmUoU3RyaW5nIGlucHV0LCBTdHJpbmcgY3VycmVudCwgTGlzdDxTdHJpbmc+cmVzdWx0cykgewogICAgICAgIGlmIChpbnB1dC5sZW5ndGgoKSA9PSAwKSB7CiAgICAgICAgICAgIHJlc3VsdHMuYWRkKGN1cnJlbnQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIFN0cmluZyBrZXkgPSBrZXlzW2ldOwogICAgICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChrZXkpKSB7CiAgICAgICAgICAgICAgICBkZWNvZGVSZWN1cnNpdmUoaW5wdXQuc3Vic3RyaW5nKGtleS5sZW5ndGgoKSksIGN1cnJlbnQgKyB2YWx1ZXNbaV0sIHJlc3VsdHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgkJZm9yIChTdHJpbmcgZW5jb2RlZCA6IG5ldyBTdHJpbmdbXXsiMTEyMyIsICIxMjM0NTYifSkgewoJCQlTdHJpbmcgZGVjb2RlZCA9IGRlY29kZShlbmNvZGVkKS5zdHJlYW0oKS5jb2xsZWN0KENvbGxlY3RvcnMuam9pbmluZygiXG4gICIpKTsKCQkJU3lzdGVtLm91dC5wcmludGYoIklucHV0ICVzIGRlY29kZXMgYXM6XG4gICVzXG4iLCBlbmNvZGVkLCBkZWNvZGVkKTsKCQl9Cgl9Cn0=