// 基本原理就是dfs模板往上套,运行时间也是真的长,暴力枚举我只会到这里
// 不过真的很好理解,就是用dfs枚举,然后当构造出来之后就把flag标记为true
bool flag = false; // 是否构造出来
/*如果构造出来的话,所有栈帧的函数全部销毁*/
void dfs(int cnt,string s1,string &res,string ha)
{
if (flag)return ;
if (cnt == enc_len)
{
if (H(s1) == ha)
{
res = s1;
flag = true;
}
return;
}
for (char c = 'b';c <= 'z';c++)
{
s1.push_back(c);
dfs(cnt+1,s1,res,ha);
s1.pop_back();
}
}
pair<string, string> solve() {
// enc_len是原始字符串长度,enc_key是密钥key
string s1 = "",s2 = "";
for (int i = 0;i < enc_len;i++)s1.push_back('a');
string ha = H(s1);
dfs(0,"",s2,ha);
return {s1,s2};
}
int main() {
cin >> enc_len >> enc_key;
auto result = solve();
cout << result.first << " " << result.second << endl;
return 0;
}