CF291C Network Mask
题目描述
## 题目背景
该问题使用了一个简化的TCP/IP地址模型,请确保您仔细阅读了该声明。
Polycarpus找到了一份工作,他是一名系统管理员。
有一天他偶然发现了n个IP地址。
每个IP地址是一个32位的数字,用4个8位数字(不带前导零)组成一组,用点分隔。
例如,记录0.255.1.123显示正确的IP地址,记录0.256.1.123和0.255.1.01不正确。
在这个问题中,由4个8位数字组成的任意组就是一个正确的IP地址。
Polycarpus作为一名管理员工作了一段时间,了解到如果您知道IP地址,您可以使用子网掩码来获得拥有该IP地址的网络地址。
子网掩码是一个IP地址,它有以下属性:如果我们把这个IP地址写为一个32位的字符串,它可以表示为“11…11000..000”。
换句话说,子网掩码首先有一个或多个1位,然后是一个或多个0位(总共有32位)。
例如,IP地址2.0.0.0不是一个正确的子网掩码,因为它的32位记录看起来是0000001000000000000000000000。
要得到IP地址的网络地址,需要执行IP地址和子网掩码的按位“与”操作。
例如,如果子网掩码是255.192.0.0,IP地址是192.168.1.2,则网络地址等于192.128.0.0。
在按位的“与”中,当且仅当两个操作数对应的位都等于1时,结果的位等于1。
现在Polycarpus想要找到他的IP地址所属的所有网络。
不幸的是Polycarpus丢失了子网掩码。
幸运的是,Polycarpus记得他的IP地址完全属于 $k$ 种不同的网络。
帮助Polycarpus找到子网掩码,这样他的IP地址将完全属于 $k$ 种不同的网络。
如果有多个子网掩码,则查找位记录中1个数最少的一个。
如果不存在这样的子网掩码,输出-1。
输入格式
第一行包含两个整数,$n$ 和 $k$$(1
输出格式
如果存在所需的子网掩码,则以语句中描述的格式在单行中输出子网掩码的IP地址。否则输出-1。