题目链接如下:
代码如下:
#include <cstdio>
// #define debug
int n, L, cnt;
char letters[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char ans[80];
bool isHard(int k){
for (int i = k - 1; i >= 0; --i){
if (ans[i] != ans[k] || i + 1 < k - i){
continue;
}
int flag = 1;
for (int j = i + 1; j < k; ++j){
if (ans[j] != ans[j - (k - i)]){
flag = 0;
break;
}
}
if (flag){
return false;
}
}
return true;
}
void generate(int k){
if (cnt >= n){
return;
}
if (k != 0){
++cnt;
}
if (cnt == n){
for (int i = 0; i < k; ++i){
printf("%c", ans[i]);
if (i == 63){
printf("%s", i == k - 1 ? "" : "\n");
} else if (i != k - 1 && i % 4 == 3){
printf(" ");
}
}
printf("\n%d\n", k);
return;
}
for (int i = 1; i <= L; ++i){
ans[k] = letters[i];
if (isHard(k)){
generate(k + 1);
}
}
}
int main(){
#ifdef debug
freopen("0.txt", "r", stdin);
freopen("1.txt", "w", stdout);
#endif
while (scanf("%d %d", &n, &L) == 2 && (n || L)){
cnt = 0;
generate(0);
}
#ifdef debug
fclose(stdin);
fclose(stdout);
#endif
return 0;
}