通过简单分析可以得知,只有当个位数为0,1,5,6的时候有可能是自守数,所以可以根据此特征来求解:

def fun(x):
    y = x**2
    a = str(x)
    b = str(y)
    if a==b[-len(a):]:
#         print(x)
        return 1
    else:
        return 0

import math
n = int(input())
num = 0
ls = [0, 1, 5, 6]
f = math.ceil(n/10)
for i in range(f):
    for j in ls:
        if j+10*i<=n:
            num += fun(j+10*i)
        else:
            break
print(num)