#include using namespace std; #define FOR(i,a,b) for(int i=(a);i<(b);++i) #define REP(i,n) FOR(i,0,n) #define ALL(v) begin(v),end(v) template inline bool chmax(A & a, const B & b) { if (a < b) { a = b; return true; } return false; } template inline bool chmin(A & a, const B & b) { if (a > b) { a = b; return true; } return false; } using ll = long long; using pii = pair; constexpr ll INF = 1ll<<30; constexpr ll longINF = 1ll<<60; constexpr ll MOD = 1000000007; constexpr bool debug = false; //---------------------------------// int main() { int N; cin >> N; auto solve = [](int n) { string N = to_string(n); vector dp(N.size() + 1, vector(2, vector(2, 0))); // [i][j][k] := 上 i 桁確定, j:max, k:leading-zero dp[0][1][1] = 1; REP(i, N.size()) REP(j, 2) REP(k, 2) { for (int l = 0; l < 10; l += 3) { if (j && N[i] < '0' + l) break; dp[i + 1][j && N[i] == '0' + l][k && l == 0] += dp[i][j][k]; } } int res = 0; REP(i, 2) res += dp[N.size()][i][false]; return res; }; int ans = solve(N) - solve(min(99, N)); ans += min(99, N) / 3 - 3; cout << ans << endl; }