#include "bits/stdc++.h" using namespace std; typedef long long ll; string make_str(int p) { string s = "1"; for (int _ = 0; _ < p; _++) { s += "0"; } return s; } int main() { int p; cin >> p; string s = make_str(p); // dp[i][mod3][3flag][smaller] vector>>> dp(s.size() + 1, vector>>(3, vector>(2, vector(2, 0)))); dp[0][0][0][0] = 1; for (int i = 0; i < s.size(); i++) { for (int j = 0; j < 3; j++) { dp[i + 1][(j + s[i] - '0') % 3][0][0] += dp[i][j][0][0]; for (int k = 0; k < 10; k++) { if (k == 3) continue; dp[i + 1][(j + k) % 3][0][1] += dp[i][j][0][1]; } for (int k = 0; k < s[i] - '0'; k++) { if (k == 3) continue; dp[i + 1][(j + k) % 3][0][1] += dp[i][j][0][0]; } dp[i + 1][j][1][1] += dp[i][j][0][1]; for (int k = 0; k < 10; k++) { dp[i + 1][(j + k) % 3][1][1] += dp[i][j][1][1]; if (k < s[i] - '0') dp[i + 1][(j + k) % 3][1][1] += dp[i][j][1][0]; } if (s[i] > '3') dp[i + 1][j][1][1] += dp[i][j][0][0]; } } ll ans = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 2; j++) { for (int k = 0; k < 2; k++) { if (i == 0 || j == 1) { ans += dp[s.size()][i][j][k]; } } } } cout << ans - 1 << endl; return 0; }