/*UVa129 - Krypton Factor
--回溯问题。看例子可知道确定该字符串是按照从左到右依次考虑每个位置,当前位置填不上所有的字符时,需要回溯。
--
*/
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<fstream>
#include<time.h>
#include<vector>
using namespace std;
const int maxn = 1000;
char ans[maxn];
int k, L, tol;
bool flag;
bool isleg(int curr){
bool res = 1;
int i, b;
for (b = 0; b < curr; b++){
int len = curr - b + 1;
if (len & 1)continue;
for (i = 0; i < len / 2; i++){
if (ans[b+i] != ans[i + b + len / 2])break;
}
if (i == len / 2)res = 0;
if (!res)break;
}
return res;
}
void dfs(int curr){
if (tol==k){ //搜索到了解
for (int i = 0; i < curr; i++){
if (i&&i % 4 == 0){
if (i%64== 0)printf("\n");
else printf(" ");
}
printf("%c", ans[i]);
}
printf("\n%d\n",curr);
flag = 1;
return;
}
if (flag)return;
for (char i = 'A'; i < 'A' + L; i++){
ans[curr] = i;
if (isleg(curr)){
tol++; //合法解,tol++
dfs(curr + 1);
}
}
}
int main(){
while (scanf("%d%d", &k, &L) && k&&L){
flag = 0;
tol = 0;
dfs(0);
}
return 0;
}