/* 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
{
{
char [][] convert = {
{}, // 0
{'A','B','C'}, // 1
{'D','E','F'}, // 2
{'G','H','I'}, // 3
{'J','K','L'}, // 4
{'M','N','O'}, // 5
{'P','R','S'}, // 6
{'T','U','V'}, // 7
{'W','X','Y'} // 8
};
// Sequence of keys to be pressed. In this case the pressed keys are
// [ABC], [DEF], [GHI]
int[] sequence = new int[] {1, 2, 3};
// List for storing the results of each level.
List<List<String>> results = new ArrayList<>();
for(int i=0; i<sequence.length; i++){
// Results of this level
List<String> words = new ArrayList<>();
results.add(words);
List<String> prevLevelWords;
if(i==0){
} else {
prevLevelWords = results.get(i-1);
}
char[] thisLevelChars = convert[sequence[i]];
if(thisLevelChars.length == 0){
words.addAll(prevLevelWords);
} else {
for(String word
: prevLevelWords
){ for(char ch : convert[sequence[i]]){
words.add(word + ch);
}
}
}
}
List<String> finalResult = results.get(sequence.length-1);
for(String word
: finalResult
) { }
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCQkgIGNoYXIgW11bXSBjb252ZXJ0ID0gIHsgICAKICAgICAgICAgICAgICB7fSwgICAgICAgICAgICAgLy8gMAoJICAgICAgICAgIHsnQScsJ0InLCdDJ30sICAvLyAxCgkgICAgICAgICAgeydEJywnRScsJ0YnfSwgIC8vIDIKCSAgICAgICAgICB7J0cnLCdIJywnSSd9LCAgLy8gMwoJICAgICAgICAgIHsnSicsJ0snLCdMJ30sICAvLyA0CgkgICAgICAgICAgeydNJywnTicsJ08nfSwgIC8vIDUKCSAgICAgICAgICB7J1AnLCdSJywnUyd9LCAgLy8gNgoJICAgICAgICAgIHsnVCcsJ1UnLCdWJ30sICAvLyA3CgkgICAgICAgICAgeydXJywnWCcsJ1knfSAgIC8vIDgKCSAgICAgIH07CgkgICAgICAKCSAgLy8gU2VxdWVuY2Ugb2Yga2V5cyB0byBiZSBwcmVzc2VkLiBJbiB0aGlzIGNhc2UgdGhlIHByZXNzZWQga2V5cyBhcmUKCSAgLy8gW0FCQ10sIFtERUZdLCBbR0hJXQoJICBpbnRbXSBzZXF1ZW5jZSA9IG5ldyBpbnRbXSB7MSwgMiwgM307CgkgIAoJICAvLyBMaXN0IGZvciBzdG9yaW5nIHRoZSByZXN1bHRzIG9mIGVhY2ggbGV2ZWwuCgkgIExpc3Q8TGlzdDxTdHJpbmc+PiByZXN1bHRzID0gbmV3IEFycmF5TGlzdDw+KCk7CgkgIAoJICBmb3IoaW50IGk9MDsgaTxzZXF1ZW5jZS5sZW5ndGg7IGkrKyl7CgkJICAKCQkgIC8vIFJlc3VsdHMgb2YgdGhpcyBsZXZlbAoJCSAgTGlzdDxTdHJpbmc+IHdvcmRzID0gbmV3IEFycmF5TGlzdDw+KCk7CgkJICByZXN1bHRzLmFkZCh3b3Jkcyk7CgkJICAKCQkgIExpc3Q8U3RyaW5nPiBwcmV2TGV2ZWxXb3JkczsKCQkgIGlmKGk9PTApewoJCQkgIHByZXZMZXZlbFdvcmRzID0gQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgiIik7CgkJICB9IGVsc2UgewoJCQkgIHByZXZMZXZlbFdvcmRzID0gcmVzdWx0cy5nZXQoaS0xKTsKCQkgIH0KCQkgIAogICAgICBjaGFyW10gdGhpc0xldmVsQ2hhcnMgPSBjb252ZXJ0W3NlcXVlbmNlW2ldXTsKICAKICAgICAgaWYodGhpc0xldmVsQ2hhcnMubGVuZ3RoID09IDApewogICAgICAgIHdvcmRzLmFkZEFsbChwcmV2TGV2ZWxXb3Jkcyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yKFN0cmluZyB3b3JkIDogcHJldkxldmVsV29yZHMpewogICAgICAgICAgZm9yKGNoYXIgY2ggOiBjb252ZXJ0W3NlcXVlbmNlW2ldXSl7CiAgICAgICAgICAgIHdvcmRzLmFkZCh3b3JkICsgY2gpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoJICB9CgkgIAoJICBMaXN0PFN0cmluZz4gZmluYWxSZXN1bHQgPSByZXN1bHRzLmdldChzZXF1ZW5jZS5sZW5ndGgtMSk7CgkgIAoJICBmb3IoU3RyaW5nIHdvcmQgOiBmaW5hbFJlc3VsdCkgewoJCSAgU3lzdGVtLm91dC5wcmludGxuKHdvcmQpOwoJICB9CgoJfQp9