/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
System.
out.
println(letterCombinations
("23")); }
private static final String[] KEYS
= { "",
"",
"abc",
"def",
"ghi",
"jkl",
"mno",
"pqrs",
"tuv",
"wxyz" };
public static List
<String
> letterCombinations
(String digits
) { List<String> ret = new LinkedList<String>();
combination("", digits, 0, ret);
return ret;
}
private static void combination
(String prefix,
String digits,
int offset, List
<String
> ret
) { if (offset >= digits.length()) {
ret.add(prefix);
return;
}
String letters
= KEYS
[(digits.
charAt(offset
) - '0')]; for (int i = 0; i < letters.length(); i++) {
combination(prefix + letters.charAt(i), digits, offset + 1, ret);
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCVN5c3RlbS5vdXQucHJpbnRsbihsZXR0ZXJDb21iaW5hdGlvbnMoIjIzIikpOwoJfQoJCglwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBLRVlTID0geyAiIiwgIiIsICJhYmMiLCAiZGVmIiwgImdoaSIsICJqa2wiLCAibW5vIiwgInBxcnMiLCAidHV2IiwgInd4eXoiIH07CiAgICAKICAgIAlwdWJsaWMgc3RhdGljIExpc3Q8U3RyaW5nPiBsZXR0ZXJDb21iaW5hdGlvbnMoU3RyaW5nIGRpZ2l0cykgewogICAgCQlMaXN0PFN0cmluZz4gcmV0ID0gbmV3IExpbmtlZExpc3Q8U3RyaW5nPigpOwogICAgCQljb21iaW5hdGlvbigiIiwgZGlnaXRzLCAwLCByZXQpOwogICAgCQlyZXR1cm4gcmV0OwogICAgCX0KICAgIAogICAgCXByaXZhdGUgc3RhdGljIHZvaWQgY29tYmluYXRpb24oU3RyaW5nIHByZWZpeCwgU3RyaW5nIGRpZ2l0cywgaW50IG9mZnNldCwgTGlzdDxTdHJpbmc+IHJldCkgewogICAgCQlpZiAob2Zmc2V0ID49IGRpZ2l0cy5sZW5ndGgoKSkgewogICAgCQkJcmV0LmFkZChwcmVmaXgpOwogICAgCQkJcmV0dXJuOwogICAgCQl9CiAgICAJCVN0cmluZyBsZXR0ZXJzID0gS0VZU1soZGlnaXRzLmNoYXJBdChvZmZzZXQpIC0gJzAnKV07CiAgICAJCWZvciAoaW50IGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGgoKTsgaSsrKSB7CiAgICAJCQljb21iaW5hdGlvbihwcmVmaXggKyBsZXR0ZXJzLmNoYXJBdChpKSwgZGlnaXRzLCBvZmZzZXQgKyAxLCByZXQpOwogICAgCQl9CiAgICAJfQp9