#include<bits/stdc++.h>
using namespace std;
#define maxn 105
// n初始给定的数
// m为目标值
// minval最小操作步数
// res数组,记录每一步操作
int m, n, minval;
char res[maxn];
int dfs(int step, int num)
{
// 如果当前操作步数,大于最少操作步数
// 则该操作序列不可能为最少操作序列
// 剪枝
if (step > minval){
return 0;
}
// 如果f操作后,或执行f操作后的后续操作能够达到目标
// 则记录,并结束递归
if (num*3 == m || dfs(step+1, num*3)){
res[step-1] = 'f';
return 1;
}
// 如果g操作后,或执行g操作后的后续操作能够达到目标
// 则记录,并结束递归
if (num/2 == m || dfs(step+1, num/2)){
res[step-1] = 'g';
return 1;
}
return 0;
}
int main()
{
cin>>n>>m;
minval = 1;
while (!dfs(1, n)){
minval++;
}
cout<<minval<<endl;
for (int i = minval-1; i >= 0; i--){
cout<<res[i];
}
cout<<endl;
return 0;
}