#include #define REP(i, x, n) for (int i = x; i < (int)(n); i++) #define rep(i, n) REP (i, 0, n) #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() #define sz(x) (int)(x.size()) #define popcount(x) __builtin_popcount(x) #define popcountll(x) __builtin_popcountll(x) #define uniq(x) x.erase(unique(x.begin(), x.end()), x.end()) #define F first #define S second #define mp make_pair #define eb emplace_back using namespace std; typedef long long ll; typedef unsigned long long ull; const int INF = 1 << 29; vector plist; ll toll(string s) { ll res = 0; rep (i, s.size()) { res = res * 10 + (int)(s[i] - '0'); } return res; } void dfs(string p) { if (p.size() > 9) return; if (p.size() != 0 && p[0] != '0') { plist.push_back(toll(p)); } rep (i, 10) { string c = string(1, (char)('0' + i)); dfs(c + p + c); } } int main() { ull n; cin >> n; // even dfs(""); // odd rep (i, 10) { dfs(string(1, (char)('0' + i))); } sort(all(plist)); int ans = 0; rep (i, plist.size()) { ull v = (ull) 1e9 * plist[i] + plist[i]; if (v <= n) ans++; else break; } cout << ans << endl; }