#B4148. [语言月赛 202502] IPv6

[语言月赛 202502] IPv6

题目描述

IP 地址是在网络中唯一标识一台网络设备的一串数字。IPv4 使用 3232 位二进制数作为 IP 地址,然而,随着网络设备数目的快速增加,IPv4 的总地址数已经耗尽。为了解决这个问题,计算机科学家引入了 IPv6。

IPv6 使用 128128 位二进制数作为 IP 地址。为了方便书写,常常将这 128128 位二进制数划分为 88 组,每组对应 1616 位二进制,在书写时,每组写为 44 位十六进制数。每两组间,使用 : 隔开。

下图展示了一个 IPv6 地址的二进制表示形式与十六进制简写格式。

然而,十六进制的书写依然非常不方便,因此,IPv6 进一步引入了 IP 地址的简写规则:

  1. 前导零省略规则。 在每一组中,前导零可以省略。例如 FC00:0:130F:0:9C0:876A:130B:0FC00:0000:130F:0000:09C0:876A:130B:0000 表示的是同一个地址。
  2. 连续零替代规则。 如果一组或连续多组全为零,可以用双冒号 :: 代替,但整个 IPv6 地址中只能使用一次 ::。例如,2001:DB8:130F::9C0:876A:130B2001:0DB8:130F:0000:0000:09C0:876A:130B 表示的是同一个地址。:: 可以出现在 IPv6 地址串的两端。

现在,给出一个十六进制形式的 IPv6 地址。该地址可能应用了上述的简写规则,请输出该 IPv6 地址对应的二进制格式。

输入格式

输入一行一个字符串,表示十六进制形式的 IPv6 地址。

输出格式

输出一行 128128 个数字字符,表示对应的二进制 IPv6 地址。字符与字符之间不要用空格隔开。

1111:2222:3333:0000:0000:0000:7777:FFF

00010001000100010010001000100010001100110011001100000000000000000000000000000000000000000000000001110111011101110000111111111111
1111:2222:3333::7777:FFFF

00010001000100010010001000100010001100110011001100000000000000000000000000000000000000000000000001110111011101111111111111111111

提示

  • 对于 40%40\% 的测试数据,IPv6 地址没有应用简化规则;
  • 对于另外 20%20\% 的测试数据,IPv6 地址没有应用连续零替代规则;
  • 对于 100%100\% 的测试数据,输入的是一个合法的 IPv6 地址。