/*
思路:
    1. ip转整数
        a. 以 '.' 来分割ip字符串
        b. 分割后的字符串转成数字存在vector<size_t>数组中
        c. 通过 左移 与 或运算 得到整数
    2. 整数转ip
        a. 通过对整数进行 与运算 和 右移, 得到四个数字
        b. 通过 to_string 把四个数字转换为字符串
        c. 拼接ip字符串
*/
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 以 '.' 来分割ip字符串
size_t ipToStr(string str){
    vector<size_t> v;
    int pos = str.find_first_of('.');
    string tmp = str.substr(0, pos);
    v.push_back(stoi(tmp));

    str = str.substr(pos+1);
    pos = str.find_first_of('.');
    v.push_back(stoi(str.substr(0, pos)));

    str = str.substr(pos+1);
    pos = str.find_first_of('.');
    v.push_back(stoi(str.substr(0, pos)));

    str = str.substr(pos+1);
    pos = str.find_first_of('.');
    v.push_back(stoi(str.substr(0, pos)));

    size_t ipInt = v[0] << 24 | v[1] << 16 | v[2] << 8 | v[3];

    return ipInt;
;
}

string numToIP(size_t str){
    string ans;
    size_t ipNum = (str);

    ans += to_string((ipNum >> 24) & 0xff);
    ans.append(1, '.');
    ans += to_string((ipNum >> 16) & 0xff);
    ans.append(1, '.');

    ans += to_string((ipNum >> 8) & 0xff);
    ans.append(1, '.');
    ans += to_string((ipNum >> 0) & 0xff);

    return ans;
}


int main() {
    string ip;
    size_t num;
    cin >> ip;
    cin >> num;

    cout << ipToStr(ip) << endl;
    cout << numToIP(num) << endl;

    return 0;
}
// 64 位输出请用 printf("%lld")