#include <bits/stdc++.h>
using namespace std;
std::vector<std::string> split(std::string str, char del)
{
    int first = 0;
    int last = str.find_first_of(del);

    std::vector<std::string> result;

    while (first < str.size())
    {
        std::string subStr(str, first, last - first);

        result.push_back(subStr);

        first = last + 1;
        last = str.find_first_of(del, first);

        if (last == std::string::npos)
        {
            last = str.size();
        }
    }

    return result;
}

unsigned GetDigit(unsigned num)
{
    unsigned digit = 0;
    while (num != 0)
    {
        num /= 10;
        digit++;
    }
    return digit;
}

long long int poww(int x, int y) {
    long long int res = 1;
    for (int i = 0; i < y; i++) {
        res *= x;
    } 
    return res;
} 

int main()
{
    long long int N;
    cin >> N;
    long long int cnt = 0;
    // for (int i = 1; i <= N; i++)
    // {
    //     int d = GetDigit(i);
    //     // cout << i << ": " << d << endl;
    //     if (d % 2 != 0)
    //     {
    //         continue;
    //     }
    //     auto a = poww(10, d/2);
    //     if (i % a == i/ a) {
    //         cnt++;
    //     }

    // }
    // cout << cnt << endl;
    for (int i= 1; i < 10e+6; i++) {
        auto d = GetDigit(i);
        auto n = poww(10,d)* i + i;
        if (n <= N) cnt++;
        else break;
    }
    cout << cnt << endl;
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define int long long

int32_t main()
{
    string s;
    cin>>s;
    int ans;
    int n=s.length();
    if(n&1) ans=pow(10,n/2)-1;
    else
    {
        int x = stoi(s.substr(0,n/2));
        int y = stoi(s.substr(n/2,n/2));
        if(x<=y) ans=x;
        else ans=x-1;
    }

    cout<<ans;
    return 0;
}
