/*
#include <stdio.h>
typedef struct
{
int age;
float grade;
char fm;
}student;
int main()
{
int a;
student st[100];
st[0].age=10;
return 0;
}
*//*
#include <stdio.h>
typedef struct
{
int a;
int b;
}student;
int main()
{
int n,i,j;
student st[101],tmp;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d %d",&st[i].a,&st[i].b);
}
for(i=1;i<n;i++)
{
for(j=1;j<=n-i;j++)
{
if(st[j].a>st[j+1].a)
{
tmp=st[j];
st[j]=st[j+1];
st[j+1]=tmp;
}
}
}
for(i=1;i<=n;i++){
printf("%d %d\n",st[i].a,st[i].b);
}
return 0;
}*/
/*
#include <stdio.h>
typedef struct
{
char name[10];
int score;
}student;
int main()
{
int i,j,n,m,max=1;
student st[101];
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%s %d",st[i].name,&st[i].score);
}
for(j=1;j<=m;j++)
{
for(i=1;i<=n;i++)
{
if(st[max].score<st[i].score)
{
max=i;
}
}
printf("%s\n",st[max].name);
st[max].score=0;
max=1;
}
return 0;
}*//*
#include <stdio.h>
// 이 부분에 들어가야 될 코드를 작성하여 제출
void myswap(int* pa,int* pb)
{
int tmp;
if(*pa>*pb)
{
tmp=*pa;
*pa=*pb;
*pb=tmp;
}
}
main()
{
int a, b;
scanf("%d%d", &a, &b);
myswap(&a, &b);
printf("%d %d", a, b);
}*/
//함수 내에서 자신을 호출하는 함수
//재귀 recursive rec() f(_)
/*#include <stdio.h>
void rec(int n)
{
if(n==0) return ; //1.종료조건
rec(n-1); //2.호출부분
printf("%d\n",n); //프린트, 실행부분
}
int main()
{
int n;
scanf("%d",&n);
rec(n);
}*//*
#include <stdio.h>
void rec(int n)
{
if(n==0)return;
rec(n-1);
printf("%d\n",n);
}
int main()
{
int n;
scanf("%d",&n);
rec(n);
}*//*
#include<stdio.h>
void rec(int n)
{
printf("%d\n",n);
if(n==1)return;
rec(n-1);
}
int main()
{
int n;
scanf("%d",&n);
rec(n);
}*/
#include<stdio.h>
void rec(int n)
{
printf("%d\n",n);
if(n==1)return;
if(n%2!=0)
{
rec(3*n+1);
}
else
{
rec(n/2);
}
}
int main()
{
int n;
scanf("%d",&n);
rec(n);
}