import java.util.*;
/**
* 原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个长整数。
* 举例:一个ip地址为10.0.3.193
* 每段数字 相对应的二进制数
* 10 00001010
* 0 00000000
* 3 00000011
* 193 11000001
* 组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。。
*/
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextLine()) {
String ipStr = in.nextLine(); // ip字符串
String ipNum = in.nextLine(); // ip数字
// ip地址转数字
ipToNum(ipStr);
// 数字转ip地址
numToIp(Long.parseLong(ipNum));
}
}
/**
* ip转数字
*/
private static void ipToNum(String ipStr) {
String[] split = ipStr.split("\\.");
final StringBuilder sb = new StringBuilder();
for (String s : split) {
StringBuilder s1 = new StringBuilder(Integer.toBinaryString(Integer.parseInt(
s)));// 转二进制
// 不够8位时,在前面补0
while (s1.length() < 8) {
s1.insert(0, "0");
}
sb.append(s1);
}
// 转10进制输出
System.out.println(Long.parseLong(sb.toString(), 2));
}
/**
* 数字转ip
*/
private static void numToIp(Long ipNum) {
StringBuilder s = new StringBuilder(Long.toBinaryString(ipNum)); // 转二进制
while (s.length() < 32) {
s.insert(0, "0");
}
final StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) {
String s1 = s.substring(i * 8, (i + 1) * 8);
int i1 = Integer.parseInt(s1, 2); // 转10进制
sb.append(i1).append(".");
}
System.out.println(sb.deleteCharAt(sb.length() - 1));
}
}