#include <math.h>
#include <string.h>

/* 整数转换为 二进制数 */
int get_bit(int num, int *bit, int index)
{
    int ret = 0;
    for(int i = index; i < index + 8; i++)
    {
        /* 每8位 将高低位互换 */
        bit[index + 8  - 1 - i + index ] = num % 2;
        num /= 2;
    }
    
    return ret;
}

int main()
{
    int bit[32];
    int ip[4] = {0};
   
    long ip_num = 0;
    int index = 0;
    /*  转IP 转10进制 */
    if(scanf("%d.%d.%d.%d", &ip[0], &ip[1], &ip[2], &ip[3]) != EOF)
    {
        
        int index = 0;
        int i = 0;
        
        for(int i = 0; i < 4; i++)
        {
            int num = 0;
            get_bit(ip[i], bit, i * 8);
           
        }

        for(int j = 0; j < 32; j++)
        {
            /* 数组中,i=0数据 为高位,高位-》地位 */
            ip_num += pow(2, 32 - 1 - j) * bit[j];
        }
        printf("%ld\n", ip_num);
    }
    
    /* 10进制 转IP */
    ip_num = 0;
    index = 0;
    int ip_size = 0;
    int data[4];
    if(scanf("%ld", &ip_num) != EOF)
    {
        while(ip_num)
        {
            int mod = ip_num % 2;
            bit[index++] = mod;
            
            ip_num /= 2;
            
            if(index == 8 || ip_num == 0)
            {
                int num = 0;
                for(int i = 0; i < 8; i++)
                {
                    num += (int)pow(2, i) * bit[i];
                    
                }
                data[ip_size++] = num;
                index = 0;
                memset(bit, 0, sizeof(bit));

            }
        }
    }
    
    for(int i = 0; i < ip_size; i++)
    {
        printf("%d", data[ip_size - 1 - i]);
        if(i < ip_size - 1)
        {
           printf("."); 
        }
        
    }
    
    
    
    return 0;
}