#include <bits/stdc++.h>
#define _ ios_base::sync_with_stdio(0);cin.tie(0);
#define INF 0x3f3f3f3f
#define eps 1e-6
typedef long long LL;
const double pi = acos(-1.0);
const long long mod = 1e9 + 2015;
using namespace std;
int N,T;
char s[105];
int cnt;
bool judge(int cur)
{
for(int i = 1;i <= (cur + 1) / 2;i++)
{
bool e = 1;
for(int j = 0;j < i;j++)
if(s[cur - i - j] != s[cur - j])
{
e = 0;
break;
}
if(e)
return false;
}
return true;
}
void output(int cur)
{
for(int i = 0;i <= cur;i++)
{
if(i % 4 == 0 && i > 0)
{
if(i % 64 == 0 && i > 0)
putchar('\n');
else
putchar(' ');
}
putchar(s[i]);
}
printf("\n%d\n", cur + 1);
}
int dfs(int cur)
{
for(int i = 0;i < T;i++)
{
s[cur] = 'A' + i;
if(judge(cur))
{
cnt++;
if(cnt == N)
{
s[cur + 1] = 0;
output(cur);
return 1;
}
if(dfs(cur + 1))
return 1;
}
}
return 0;
}
int main()
{
ios_base::sync_with_stdio(false); cin.tie(0);
int first = 0;
int t = 0;
while(cin >> N >> T)
{
if(N == 0 && T == 0)
break;
cnt = 0;
dfs(0);
}
return 0;
}
#include <iostream>
#include <string>
using namespace std;
void Sequence(string &str, int &n, int L) {
int nLen = str.length(), nHalf = (str.length() + 1) / 2;
for (char i = 'A', iEnd = L + 'A', m = 1; i < iEnd; ++i) {
str.push_back(i);
for (m = 1; m <= nHalf; ++m) {
if (equal(str.end() - m, str.end(), str.end() - m * 2)) {
m = 0;
break;
}
}
if (m != 0) {
if (--n == 0) return;
Sequence(str, n, L);
if (n == 0) return;
}
str.erase(nLen);
}
}
int main(void) {
for (int n, L; cin >> n >> L && n != 0; ) {
string str;
Sequence(str, n, L);
int nLen = str.length();
for (size_t i = 4; i < str.length(); i += 5) {
str.insert(str.begin() + i, i == 79 ? '\n' : ' ');
}
cout << str << '\n' << nLen << endl;
}
return 0;
}