const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
// 转为 二进制 Number.toString(2);
// 二进制转10进制 parseInt(el, 2);
void async function () {
// Write your code here
function getNum(key) {
// 输入: 10.0.3.193
// 首先 将 IP 分割, 每段 转为对应的二进制数组 key.split(".").map(el => parseInt(el).toString(2)),
// 如果不够8位,用padStart 补齐, map(el => el.padStart(8, "0"))
// join("") 最终该数组转为字符串 '00001010000000000000001111000001'
// 最后将该字符串转为10进制 parseInt(nums, 2)
var nums = key.split(".").map(el => parseInt(el).toString(2)).map(el => el.padStart(8, "0")).join("");
console.log(parseInt(nums, 2));
}
function getIp(str) {
// 输入: 167969729
// 先转为 二进制数字 toString(2)
// 如果不够32 位,补齐 32位 padStart(32, "0")
// 然后把这个 32位的 按 每8位分割成 数组 [ip32.slice(0, 8), ip32.slice(8, 16), ip32.slice(16, 24), ip32.slice(24, 32)]
// 最后把这个数组每项转为10进制 parseInt(el, 2)
// 打印最终 结果 console.log(ipArr.join("."))
var ip32 = parseInt(str).toString(2).padStart(32, "0");
var ipArr = [ip32.slice(0, 8), ip32.slice(8, 16), ip32.slice(16, 24), ip32.slice(24, 32)].map(el => parseInt(el, 2));
console.log(ipArr.join("."));
}
while(line = await readline()){
// 如果输入是正常ip, 转为 10进制输出;
// 如果输入是 10进制 ip, 转为正常IP;
if (line.indexOf(".") > -1) {
getNum(line);
} else {
getIp(line);
}
}
}()