//服务端第三题,ac
#include<iostream>
#include<string>
#include<vector>
using namespace std;
void getResult(string& temp, vector<string>& r, string& tempIn, int p) {
if (p >= temp.size()) {
r.push_back(tempIn);
return;
}
tempIn.push_back(temp[p] - '0' - 1+ 'a');
getResult(temp, r, tempIn, p + 1);
tempIn.pop_back();
if (temp.size()-p <= 1)return;
if (temp[p] <= '2'&&temp[p + 1] <= '6' || temp[p] <= '1') {
tempIn.push_back(((temp[p] - '0') * 10 + (temp[p + 1] - '0')) - 1 + 'a');
getResult(temp, r, tempIn,p + 2);
tempIn.pop_back();
}
}
int main(void) {
string temp, r, tempIn;
vector<string> result;
while (cin >> temp) {
getResult(temp, result, tempIn, 0);
for (int i = 0; i < result.size(); ++i) {
for(int j=0;j<result[i].size();++j)
printf("%c",result[i][j]);
if (i == result.size() - 1)printf("\n");
else printf(" ");
}
r.clear();
tempIn.clear();
result.clear();
temp.clear();
}
return 0;
}