#include<stdio.h>
#include<string.h>
#include<limits.h>
#include<stdlib.h>
#include<math.h>
long binaryToSignedDecimal(const char*binaryString)
{
    int length=strlen(binaryString);
    if (length>32)
    {
        printf("Invalid Input\n");
        return LONG_MIN;
    }
    for (int i=0; i<length; i++)
    {
        if (binaryString[i] !='0' && binaryString[i] !='1')
        {
            printf("Invalid Input\n");
            return LONG_MIN;
        }
    }
    long decimalValue=0;
    int power=0;
    int isNegative=(binaryString[0] == '1' && length == 32);
    for (int i=length-1; i>=0; i--)
    {
        if (binaryString[i]=='1')
        {
            if(i==0 && length==32)
            {
                decimalValue-=(long)pow(2, length-1);
            }
            else
            {
                decimalValue+=(long)pow(2, power);
            }
        }
        power++;
    }
    return decimalValue;
    int main()
    {
        char binaryString[33];
        if (scanf("%s", binaryString) !=1)
        {
            return 1;
        }
        for (int i=0; i<strlen(binaryString); i++)
        {
            if (binaryString[i] !='0' && binaryString[i] !='1')
            {
                printf("Invalid Input\n")
                return 0;
            }
        }
        long result=binaryToSignedDecimal(binaryString);
        if (result != LONG_MIN)
        {
            printf("%ld\n", result);
        }
        result 0;
    }
}