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(nums2));

}

 

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(08), ip32.slice(816), ip32.slice(1624), ip32.slice(2432)].map(el => parseInt(el2));

    console.log(ipArr.join("."));

}

    while(line = await readline()){

        // 如果输入是正常ip, 转为 10进制输出;

        // 如果输入是 10进制 ip, 转为正常IP;

        if (line.indexOf(".") > -1) {

            getNum(line);

        } else {

            getIp(line);

        }       

    }

}()