# 入力を整数に変換して受け取る import sys sys.setrecursionlimit(10 ** 6)#pypy3はnumpyを使えない,この行を消すこと. # 入力を整数に変換して受け取る def II(): return int(sys.stdin.readline()) # 入力全てを整数に変換したものの配列を受け取る def LI(): return list(map(int, sys.stdin.readline().split())) # 入力の文字列を1文字ずつに分けたものの配列を受け取る def LC(): return list(input()) # 入力の数字列を1桁ずつに分けたものの配列を受け取る def IC():return [int(c) for c in input()] #少ない1行のint変数に入れる様の入力.例:N, A, B = map(int, input().split()) def MI(): return map(int, input().split()) def solve(): N = II() def is_ok(arg): return arg**2 <= N def meguru_bisect(ng, ok): """ 負の無限~(目的値)が条件を満たす場合 ng…条件を満たさない値の範囲での最小値 ok…条件を満たす値の範囲での最大値 """ while (abs(ok - ng) > 1): mid = (ok + ng) // 2 if is_ok(mid): ok = mid else: ng = mid return ok ans=str(meguru_bisect(N, 0)) print(len(ans)) return solve()