/*
#include <stdio.h>
int k=1;
void f(int n)
{
if(n==0)
{
return;
}
else
{
f(n-1);
}
g(n);
printf("\n");
}
void g(int m)///m개의 별을 출력
{
printf("*");
if(m<=1)
{
return;
}
else
{
g(m-1);
}
}
int main()
{
int n;
scanf("%d", &n);
f(n);
}
*/
/*
#include<stdio.h>
int su[55][55]={0};
int hi[55][55]={0};
int f(int a, int b)
{
if(a==1||b==1)
{
return su[a][b] = 1;
}
if(su[a][b]==0)
{
return su[a][b]=f(a-1, b)%100000000 + f(a, b-1)%100000000;
//hi[a][b]=1;
}
else
{
return su[a][b]%100000000;
}
}
int main()
{
int r, c;
int i, j;
scanf("%d %d", &r, &c);
for(i=0; i<=50; i++)
{
for(j=0; i<=50; i++)
{
if(i==1||j==1)
{
su[i][j]=1;
hi[i][j]=1;
}
}
}
printf("%d", f(r, c)%100000000);
}
*/
/*
#include<stdio.h>
int su[100004]={0};
int f(int n)
{
if(n==1)
{
return su[n]=1;
}
else if(n==2)
{
return su[n]=2;
}
else if(n==3)
{
return su[n]=4;
}
if(su[n]==0)
{
return su[n]=f(n-1)%1000+f(n-2)%1000+f(n-3)%1000;
}
else
{
return su[n]%1000;
}
}
int main()
{
int n;
scanf("%d", &n);
printf("%d", f(n)%1000);
}
*/
/*
#include<stdio.h>
int k=0;
int su[10000005]= {0};
int gu[10000005]={0};
int ham(int n)
{
int p=n;
k++;
if(n==1)
{
return;
gu[p]=k;
}
if(su[n]==0)
{
if(n%2==0)
{
return su[n/2]=ham(n/2);
}
else
{
return su[3*n+1]=ham(3*n+1);
}
}
else
{
return su[n];
}
}
int main()
{
int a, b;
int x, y, i;
scanf("%d", &a, &b);
for(i=a; i<=b; i++)
{
ham(i);
}
for(i=a; i<=b; i++)
{
x=gu[a];
if(x<gu[i])
{
x=gu[i];
y=i;
}
}
printf("%d", x);
}
*/
#include <stdio.h>
int k, pi;
int p[10000005]={0};///메모이제이션
int q[10000005]={0};///k 값 저장
int f(int n)///우박수 기본, 길이 구해서 저장?
{
pi=n;
k++;///한번 함수가 재귀될 때마다 1번씩 더해짐 (초기값이 1)
if(n==1)
{
return;
q[pi]=k;
}
if(p[n]==0)
{
if(n%2==0)
{
p[n]=f(n/2);
}
else
{
p[n]=f(3*n+1);
}
}
else
{
return p[n];
}
}
int main()
{
int a, b;
int i, j;
int x, y;
x=q[a];
scanf("%d", &a, &b);
for(i=a; i<=b; i++)
{
f(i);
}
for(i=a; i<=b; i++)
{
if(x<q[i])
{
x=q[i];
y=i;
}
}
printf("%d %d", x, y);
}