B3972 [语言月赛 202405] 二进制

题目描述

在介绍十进制转二进制的篇目中,我们总会看到这样的方法: - 求出这个数字除以 $2$ 的**商**和**余数**,然后将余数写在右侧,用商替换原来的数字; - 重复以上过程直到这个数字变为 $0$; - 最后将右侧的所有余数**倒序**排列,得到的就是原数字的二进制形式。 小 S 也在学习二进制,不过她很懒,不想计算那么多次除法。于是她找到了你,希望你能为她写一个程序,帮助她得到上述过程中所有的**商**和**余数**。

输入格式

一行,一个正整数 $n$,表示她想要转成二进制的数字。

输出格式

输出若干行,每一行两个数字 $x_i$ 和 $y_i$,表示第 $i$ 次除法得到的商和余数。你应该保证 $y_i$ 是 $0$ 或 $1$。

说明/提示

### 样例 1 解释 首先,$9 = 2 \times 4 + 1$,所以第一行输出 `4 1`,并令 $9$ 变为 $4$; 然后,$4 = 2 \times 2 + 0$,所以第二行输出 `2 0`,并令 $4$ 变为 $2$; 接着,$2 = 2 \times 1 + 0$,所以第三行输出 `1 0`,并令 $2$ 变为 $1$; 最后,$1 = 2 \times 0 + 1$,所以第四行输出 `0 1`,并令 $1$ 变为 $0$。过程结束。 ### 样例 2 解释 首先,$22 = 2 \times 11 + 0$,所以第一行输出 `11 0`,并令 $22$ 变为 $11$; 然后,$11 = 2 \times 5 + 1$,所以第二行输出 `5 1`,并令 $11$ 变为 $5$; 接着,$5 = 2 \times 2 + 1$,所以第三行输出 `2 1`,并令 $5$ 变为 $2$; 再然后,$2 = 2 \times 1 + 0$,所以第四行输出 `1 0`,并令 $2$ 变为 $1$; 最后,$1 = 2 \times 0 + 1$,所以第五行输出 `0 1`,并令 $1$ 变为 $0$。过程结束。 ### 数据范围 对于前 $30 \%$ 的数据,保证 $n$ 为若干个 $2$ 的乘积,且 $1 \leq n \leq 10^9$; 对于另 $30 \%$ 的数据,保证除法最多只进行 $3$ 次; 对于 $100 \%$ 的数据,保证 $1 \leq n \leq 10^{18}$。