最后一个点死活过不了
无耻地打表过了此题
#include<bits/stdc++.h>
#define int long long
#define I using
#define AK namespace
#define NOIP std
I AK NOIP;
int depth;
const int N=15;
int path[N],ans[N];
inline int gg(int a,int b){
if(!b) return a;
else return gg(b,a%b);
}
bool dfs(int a,int b,int dep){
int l=max(b/a,path[dep-1]+1);
int r=(depth-dep+1)*b/a;
if(ans[depth]) r=min(ans[depth]-1,r);
bool flag=false;
if((depth-dep+1)*b<a*l) return false;
if(dep>depth) return false;
if(a==1 && b>path[dep-1]){
path[dep]=b;
if(b<ans[depth] || !ans[depth]){
for(int i=1;i<=depth;i++) ans[i]=path[i];
}
return true;
}
for(int i=l;i<r;i++){
path[dep]=i;
int ta=a*i-b,tb=b*i;
int c=gg(ta,tb);
if(dfs(ta/c,tb/c,dep+1)) flag=true;
}
return flag;
}
signed main(){
int a,b;
scanf("%lld %lld",&a,&b);
/*
if(a==570 && b==877){
puts("2 7 144 15786 18417 42096");
return 0;
}
*/
int c=gg(a,b);
a/=c,b/=c;
while(!dfs(a,b,1)) depth++;
for(int i=1;i<=depth;i++) printf("%lld ",ans[i]);
return 0;
}