#P2799. IP Networks

IP Networks

问题描述

Alex 是一个 IP 网络管理员。他的客户有一堆独立的 IP 地址,他决定将这些 IP 地址分组到尽可能小的 IP 网络中。

每个 IP 地址是一个 44 字节的数字,用十进制点分隔表示法 "byte0.byte1.byte2.byte3"(引号仅用于清晰)。每个字节是一个从 00255255(包括0 0255255)的十进制数字,没有多余的前导零。

IP 网络由两个 44 字节数字描述——网络地址和网络掩码。网络地址和网络掩码都使用与 IP 地址相同的表示法。

为了理解网络地址和网络掩码的含义,你需要考虑它们的二进制表示。IP 地址、网络地址和网络掩码的二进制表示由 3232 位组成:88 位用于 byte0(最高有效位到最低有效位),接着是 88 位用于 byte1,接着是8 8 位用于 byte2,最后是 88 位用于 byte3

IP 网络包含一个 2n2^n 个 IP 地址的范围,其中 0<=n<=320 <= n <= 32。网络掩码在其二进制表示中总是有 32n32-n 个前导位设置为 1,n 个最后位设置为 0。网络地址在其二进制表示中有任意的 32n32-n 个前导位,n 个最后位设置为 00。IP 网络包含所有 IP 地址,这些 IP 地址的 32n32-n 个前导位与网络地址的 32n32-n 个前导位相同,nn 个最后位可以是任意的。如果一个 IP 网络包含的 IP 地址比另一个 IP 网络少,则称这个 IP 网络更小。

例如,网络地址为 194.85.160.176194.85.160.176,网络掩码为 255.255.255.248255.255.255.248 的 IP 网络包含从 194.85.160.176194.85.160.176 194.85.160.183194.85.160.183(包括)的 88 个 IP 地址。

输入

输入的第一行包含一个整数 m1<=m<=1000m(1 <= m <= 1000)。接下来的 mm 行包含 IP 地址,每个地址占一行。每个 IP 地址在输入中可能出现多次。

输出

输出两行,描述包含所有给定 IP 地址的最小 IP 网络。第一行输出网络地址,第二行输出网络掩码。

示例输入 1

3
194.85.160.177
194.85.160.183
194.85.160.178

示例输出 1

194.85.160.176
255.255.255.248

来源

Northeastern Europe 2005