#include <iostream>
#include <string>
#include <vector>
#include <array>
using namespace std;
/*
思路:根据'.'截取每段数字存储于vecotr<string>,转化int类型,再 取模2与除商2转化二进制,再转成10进制(1*1 + 1*4+ 1*8 + ...),
最后转成string,
*/
long IpConverDecimal(string ipAddr)
{
array<long, 4> arrNum{0};
int point = 0;
for(int i = 0; i < ipAddr.length(); i++) {
if(ipAddr[i] != '.') {
arrNum[point] = arrNum[point]*10 + ipAddr[i] - '0';
} else {
point++;
}
}
long deciValue = arrNum[0] << 24 | arrNum[1] << 16 | arrNum[2] << 8 | arrNum[3]; //位运算
return deciValue;
}
/*
思路:将字符串转成int, 取模2与除商2转化二进制,8位二进制转化十进制,得到对应一段数字,字段+‘.’+字段 后得到IP地址
*/
string DecimalConverIp(int deciValue)
{
string ipAddr;
ipAddr += to_string((deciValue >> 24) & 0xff); //第1个八位二进制转化字符
ipAddr += '.';
ipAddr += to_string((deciValue >> 16) & 0xff); //第2个八位二进制转化字符
ipAddr += '.';
ipAddr += to_string((deciValue >> 8) & 0xff); //第3个八位二进制转化字符
ipAddr += '.';
ipAddr += to_string(deciValue & 0xff); //第4个八位二进制转化字符
return ipAddr;
}
int main()
{
string ipAddr;
long decimalValue;
while(cin>>ipAddr>>decimalValue) {
cout<<IpConverDecimal(ipAddr)<<endl;
cout<<DecimalConverIp(decimalValue)<<endl;
}
}