#include <iostream>
using namespace std;

typedef struct Stack{
	int data;
	int length;
	Stack *next;
} StackNode, *LinkStack;

bool StackInit(LinkStack &S)      // 初始化函数,初始为空
{
	S = NULL;
	return true;
}
bool StackPush(LinkStack &S, int e)     // 入栈
{
	LinkStack p = new StackNode;	// 生成新节点
	p->data = e;	// 生成数据域
	if(S == NULL)   // 栈的长度加一
        p->length = 1;
    else
        p->length = S->length + 1;
	p->next = S;	// 插入在栈顶
	S = p;			// 修改栈顶, S 始终指向栈顶
	return true;
}
bool StackPop(LinkStack &S)     // 出栈
{
	LinkStack p = S;
	if(S == NULL)
		return false;
	else
	{
		S = S->next;    // 栈顶指针后移
		delete p;
		return true;
	}
}
int StackTop(const LinkStack &S)    // 取出栈顶元素
{
    if(S == NULL)
        return false;
    else
        return S->data;
}
int StackLength(const LinkStack &S)     // 求栈的长度
{
    if(S == NULL)
        return 0;
    else
        return S->length;
}
bool StackClear(LinkStack &S)       // 清空栈
{
    LinkStack p;
    while(S)
    {
        p = S;
        S = S->next;
        delete p;
    }
    return true;
}
void change(LinkStack &S, int n)      // 十进制到二进制转换函数
{
    int e;
    do{
        e = n % 2;
        n = n / 2;
        StackPush(S, e);
    }while(n);
}

int main()
{
    int n;
    LinkStack S;    // 定义
    StackInit(S);   // 初始化
    while(cin >> n)
    {
        cout << "十进制数:" << n << endl;
        cout << "对应二进制:";
        change(S, n);
        int len = StackLength(S);       // 求出栈的长度
        for(int i = 0; i<len; i++)
        {
            cout << StackTop(S);        // 输出栈顶元素
            StackPop(S);            // 弹出
        }
        cout << endl;
        StackClear(S);          // 清空
    }



	return 0;
}