#P05041. IPv6地址表示法-压缩

IPv6地址表示法-压缩

题目背景

IPv6\verb|IPv6|(第六版本 IP\verb|IP| 地址)是一个 128128 位的二进制整数,为了使用方便,将 128128IPv6\verb|IPv6| 地址每 1616 位划分为一段,总共 88 段,每段的 1616 位二进制数用 44 位十六进制数表示(四位二进制数正好可以用一位十六进制数表示),段与段之间用 : 隔开,这种表示方法叫做 冒号十六进制表示法,例如:fe80:0000:0001:0000:0440:44ff:1233:5678\verb|fe80:0000:0001:0000:0440:44ff:1233:5678|

书写的时候可以将每段高位的 00 省略,例如上面的 IPv6\verb|IPv6| 地址可以书写为 fe80:0:1:0:440:44ff:1233:5678\verb|fe80:0:1:0:440:44ff:1233:5678|

有时候 IPv6\verb|IPv6| 地址中有很多 00,可以把连续的多段 00 压缩为 :: ,但一个 IPv6\verb|IPv6| 地址中只能有一个 ::。例如 fe80:0:1:0:440:44ff:1233:5678\verb|fe80:0:1:0:440:44ff:1233:5678| 压缩后可以表示为 fe80::1:0:440:44ff:1233:5678\verb|fe80::1:0:440:44ff:1233:5678| 或者 fe80:0:1::440:44ff:1233:5678\verb|fe80:0:1::440:44ff:1233:5678|

fe80:0000:0000:0000:0000:0000:0001:0000\verb|fe80:0000:0000:0000:0000:0000:0001:0000| 压缩后可以表示为 fe80::0001:0000\verb|fe80::0001:0000| 或者 fe80::1:0\verb|fe80::1:0|

【附】十六进制数 0~f\verb|0~f| 与四位二进制数的对应关系如下表所示:

十六进制数 四位二进制数 十六进制数 四位二进制数
0 0000 8 1000
1 0001 9 1001
2 0010 a 1010
3 0011 b 1011
4 0100 c 1100
5 0101 d 1101
6 0110 e 1110
7 0111 f 1111

题目描述

给定一些用 128128 位二进制书写的 IPv6\verb|IPv6| 地址,将它们转换成对应的用 冒号十六进制表示法 表示的 IPv6\verb|IPv6| 地址。

需要特别注意的是,要尽可能地保证用 冒号十六进制表示法 表示的 IPv6\verb|IPv6| 地址长度最小。如果某个 IPv6\verb|IPv6| 地址符合要求的 冒号十六进制表示法 有多个,那么输出这些方法中 :: 最靠前的方案。

输入格式

第一行是一个正整数 NN,接下来有 NN 行,每行是一个用 128128 位二进制书写的 IPv6\verb|IPv6| 地址。

输出格式

一共 NN 行,依次是输入的 IPv6\verb|IPv6| 地址对应的 符合题目要求的 冒号十六进制表示法

输入输出样例

7
00000001001000110100010101100111100010011010101111001101111011110000000100100011010001010110011110001001101010111100110111101111
11111110100000000000000000000000000000000000000100000000000000000000010001000000010001001111111100010010001100110101011001111000
11111110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000
11111110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
11111110100000000000000000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111010000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
123:4567:89ab:cdef:123:4567:89ab:cdef
fe80::1:0:440:44ff:1233:5678
fe80::1:0
fe80::
fe80::5:0:0:0
::fe80
::

说明/提示

👀️ 对于 100%100\% 的数据,1N1051 \leq N \leq 10^5