#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<assert.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int SElemType;
typedef struct{
SElemType * base;
SElemType * top;
int stacksize;
}SqStack;
Status InitStack(SqStack *s){
s->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!s->base)
exit(OVERFLOW);
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
return OK;
}
Status Push(SqStack *s,SElemType e)
{
if(s->top - s->base>=s->stacksize){
s->base=(SElemType *)realloc(s->base,(s->stacksize+ STACKINCREMENT)*sizeof(SElemType));
if(s->base==NULL)
exit(OVERFLOW);
s->top=s->base+s->stacksize;
s->stacksize+= STACKINCREMENT;
}
*s->top++=e;
return OK;
}
Status Pop(SqStack *s, SElemType &e)
{
if(s->top==s->base)
return ERROR;
e=*--s->top;
return OK;
}
Status StackEmpty(SqStack *s)
{
if(s->top==s->base) return TRUE;
else
return FALSE;
}
void conversion(){
SqStack *s=NULL;
SElemType e;
int N;
InitStack(&s);
scanf("%d",&N);
while(N){
Push(&s,N%8);
N=N/8;
}
while(!StackEmpty(&s)){
Pop(&s,&e);
printf("%d\n",e);
}
}
int main(void)
{
conversion();
return 0;
}