import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 获取输入ip字符串和十进制数字
String ip = br.readLine();
long num = Long.parseLong(br.readLine());
// 将ip字符串地址转换为十进制数字
System.out.println(ipToDecimalNumber(ip));
// 将十进制数字转换为ip地址
System.out.println(decimalNumberToIp(num));
}
// 将ip地址转换为十进制数字的函数
public static long ipToDecimalNumber(String ip) {
// 分割ip地址为字符串数组
String[] parts = ip.split("\\.");
// 将每一个元素转为二进制字符串后拼接
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < parts.length; i++) {
int num = Integer.parseInt(parts[i]); // 获取当前ip段数字
String binaryIp = Integer.toBinaryString(num); // 将其转换为二进制字符串
while (binaryIp.length() < 8) { // 将字符串从前面补足至8位
binaryIp = "0" + binaryIp;
}
buffer.append(binaryIp); // 拼接
} // 遍历结束
// 将2进制字符串转换为十进制后返回
return Long.parseLong(buffer.toString(), 2);
}
// 将十进制数字转换为ip地址的函数
public static String decimalNumberToIp(long num) {
// 将数字转换为二进制字符串
String binaryIp = Long.toBinaryString(num);
// 将字符串从前面补足至32位
while (binaryIp.length() < 32) {
binaryIp = "0" + binaryIp;
}
// 将字符串每8位切割后转换为数字,再进行拼接
String[] ans = new String[4];
int index = 0;
for (int i = 8; i <= binaryIp.length(); i += 8) {
String partBinaryIp = binaryIp.substring(i - 8, i); // 每8位截取子串
int partNum = Integer.parseInt(partBinaryIp,2); // 将二进制子串转换为十进制数字
// 将十进制数字转换为字符串后存入数组
ans[index++] = Integer.toString(partNum);
}
// 拼接数组中的结果后输出
return String.join(".",ans);
}
}