One beautiful July morning a terrible thing happened in Mainframe: a mean virus Megabyte somehow got access to the memory of his not less mean sister Hexadecimal. He loaded there a huge amount of n different natural numbers from 1 to n to obtain total control over her energy.

But his plan failed. The reason for this was very simple: Hexadecimal didn't perceive any information, apart from numbers written in binary format. This means that if a number in a decimal representation contained characters apart from 0 and 1, it was not stored in the memory. Now Megabyte wants to know, how many numbers were loaded successfully.

Input

Input data contains the only number n (1 ≤ n ≤ 109).

Output

Output the only number — answer to the problem.

Examples

Input

10


Output

2

Note

For n = 10 the answer includes numbers 1 and 10.
'''
I=lambda : list(map(int,input().split(' ')))
from collections import defaultdict
y,w=I()
x=1+6-max(y,w)
if x==0:
    print('0/1')
elif x==1:
    print('1/6')
elif x==2:
    print('1/3')
elif x==3:
    print('1/2')
elif x==4:
    print('2/3')
elif x==5:
    print('5/6')
else:
    print('1/1')
'''

'''
import math
I=lambda : list(map(int,input().split(' ')))
m,vb,vs=I()
stops=I()
xu,yu=I()
fun=lambda x: (1.0*x/vb+ 1.0*math.sqrt((xu-x)**2+(yu)**2)/vs,1.0*math.sqrt((xu-x)**2+(yu)**2))
s=(sorted([(fun(x),i+2) for i,x in enumerate(stops[1:])])[0][1])
print(s)
    
'''

n=int(input())

import sys
sys.setrecursionlimit(100000)
num=['0']*10
def rec(i):
    if i==0:
        return [['1'],['0']]
    else:
        ll=rec(i-1)
        ans=[]
        ans+=list(map(lambda x: ['0']+x,ll))
        ans+=list(map(lambda x: ['1']+x,ll))
        return ans
ll=sorted(list(map(lambda x: int("".join(x)),rec(10))))[1:]
cnt=0
for ele in ll: 
    if ele<=n: 
        cnt+=1
print(cnt)
    