package newPro;
import java.util.*;
public class pro11 {
static final int N=100000;
static int a,b;
static long ans[]=new long[N];
static long v[]=new long[N];
static int maxd;
public static void main(String args[])
{
Scanner in=new Scanner(System.in);
a=in.nextInt();
b=in.nextInt();
for( maxd=1;;maxd++)
{
Arrays.fill(ans, -1);
if(dfs(0,get_first(a,b),a,b)) break;
//System.out.println(maxd);
}
for(int i=0;i<=maxd;i++)
{
System.out.print(ans[i]+" ");
}
}
public static long get_first(long aa,long bb)
{
return bb/aa+1;//
}
public static boolean better(int d)
{
for(int i=d;i>=0;i--)
{
if(v[i]!=ans[i]) {
return ans[i]==-1||v[i]<ans[i];//最小的分数要越大,即分母要越小好
}
}
return false;
}
public static long gcd(long x,long y)
{
return y==0? x:gcd(y,x%y);
}
public static boolean dfs(int d,long from,long aa,long bb)
{
if(d==maxd)
{
//判断是否为最约束
if(aa!=1) return false;
v[d]=bb;//加入最后的分数,保存的为加入分数的倒数,即原来的分母
if(better(d)) {ans=Arrays.copyOf(v,d+1);}
return true;
}
boolean ok=false;
from=Math.max(from, get_first(aa,bb));//上一个循环直接记录的是i+1,因此在当前循环要再次判断from
for(long i=from;;i++)
{
if(bb*(maxd-d+1)<=aa*i) break;
v[d]=i;
long a2,b2;
a2=aa*i-bb;
b2=bb*i;
long g=gcd(a2,b2);
if(dfs(d+1,i+1,a2/g,b2/g)) ok=true;//使用的是i+1
}
return ok;
}
}