#include<iostream>
#include<queue>
#include<algorithm>
#include<map>
#include<cstring>
#include<cmath>
#include<cstdio>
#include <iomanip>
#include <stack>
#include <vector>
#include <sstream>
#include <climits>
using namespacestd;
int height_initial_cat,num_workcats;
int N;
int log(int value,int base);
int main()
{
while (scanf("%d%d",&height_initial_cat,&num_workcats) && (height_initial_cat||num_workcats))
{
for(N=1;;N++)
{
int x1 =log(num_workcats,N);
int x2 =log(height_initial_cat,N+1);
if(x1==-1 ||x2== -1)
continue;
if(x1==x2 || x1==-2 || x2==-2)
break;
}
int height;
int flag=0;
int sum=0;
int num;
for(height=height_initial_cat,num=1;height>0;height/=N+1,num*=N)
{
flag+=num;
sum+=height*num;
}
cout<<flag-num_workcats<<" "<<sum<<endl;
}
return0;
}
int log(int value,int base)
{
if(value==1 && base==1)
return -2;
int count =0 ;
while (value>1 && base>1)
{
if(value%base!=0)
return -1;
count++;
value/=base;
}
return count;
}