#include <bits/stdc++.h>
#define maxN 32
#define maxV 4
#define ll long long
using namespace std;
int n, K;
ll p;
ll dp[maxN][maxN][maxV];
void read()
{
freopen("expresii2.in", "r", stdin);
scanf("%d %d %lld", &n, &K, &p);
}
void solve()
{
int i, j;
dp[0][1][3] = 1LL;
for (i = 1; i <= n; ++ i)
for (j = 0; j <= n; ++ j)
{
if (j < n)
dp[i][j][0] += dp[i - 1][j + 1][3];
if (j > 1)
dp[i][j][1] += dp[i - 1][j - 1][3];
if (j)
dp[i][j][2] += dp[i - 1][j][3];
dp[i][j][0] = 1LL * K * dp[i][j][0];
dp[i][j][1] = 2LL * dp[i][j][1];
dp[i][j][3] = dp[i][j][0] + dp[i][j][1] + dp[i][j][2];
}
}
void get_sol()
{
int i = n, j = 0, k;
while (i)
{
for (k = 0; k < 3; ++ k)
if (dp[i][j][k] <= p)
p -= dp[i][j][k];
else
break;
if (k == 0)
{
++ j;
ll var = p / (dp[i][j][0] / K);
printf("%c", var + 'A');
p -= var * (dp[i][j][0] / K);
}
else if (k == 1)
{
ll sgn = p / (dp[i][j][1] / 2);
if (sgn == 0 || p == (dp[i][j][1] / 2))
printf("+");
else
printf("*");
p -= sgn * (dp[i][j][1] / 2);
-- j;
}
else
printf("!");
-- i;
}
}
void write()
{
freopen("expresii2.out", "w", stdout);
printf("%lld\n", dp[n][0][3]);
get_sol();
}
int main()
{
read();
solve();
write();
return 0;
}