#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define all(a) a.begin(),a.end() #define rep(i, n) for (ll i = 0; i < (n); i++) #define pb push_back #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair P; typedef complex com; constexpr int inf = 1000000010; constexpr ll INF = 1000000000000000010; constexpr ld eps = 1e-12; constexpr ld pi = 3.141592653589793238; template inline bool chmax(T &a, const U &b) { if (a < b) { a = b; return true; } return false; } template inline bool chmin(T &a, const U &b) { if (a > b) { a = b; return true; } return false; } ll dp[100][100][2]; int main() { cin.tie(0); ios::sync_with_stdio(false); cout << fixed << setprecision(20); ll n; cin >> n; vector a; while (n) { if (n % 5 > 2) { a.pb(n % 5 - 5); n += 5 - n % 5; } else { a.pb(n % 5); n -= n % 5; } n /= 5; } reverse(all(a)); dp[0][50][0] = 1; int sz = a.size(); rep(i, sz) { rep(j, 100) { rep(flag, 2) { for (int k = -2; k <= (flag ? 2 : a[i]); k++) { if (0 <= j + k && j + k < 100) { dp[i + 1][j + k][flag || k < a[i]] += dp[i][j][flag]; } } } } } ll ans = dp[sz][50][0] + dp[sz][50][1]; rep(i, 100) rep(j, 100) rep(k, 2) dp[i][j][k] = 0; dp[0][50][0] = 1; vector b(sz); rep(i, sz) { rep(j, 100) { rep(flag, 2) { for (int k = -2; k <= (flag ? 2 : b[i]); k++) { if (0 <= j + k && j + k < 100) { dp[i + 1][j + k][flag || k < b[i]] += dp[i][j][flag]; } } } } } cout << ans - (dp[sz][50][0] + dp[sz][50][1]) << '\n'; }