#include<bits/stdc++.h>
using namespace std;

using ll=long long;
using ull=unsigned long long;
using i128=__int128_t;
using u128=__uint128_t;
using ld=long double;

void solve()
{//对于n元 我们有三种硬币去凑齐 设dp[n]为凑出硬币数量最小值 假设我们已知dp[n-7],dp[n-5],dp[n-1]
	int n;//那么dp[n]的值其实就是在这三者中取最小值加一 因为只有这三种情况可以通过添加一枚硬币到达dp[n]
	cin >> n;
	vector<int>dp(n+1,0);
	dp[1]=1,dp[2]=2,dp[3]=3,dp[4]=4,dp[5]=1,dp[6]=2,dp[7]=1;
	for(int i=8;i<=n;i++)
	{
		dp[i]=min(min(dp[i-7],dp[i-5]),min(dp[i-5],dp[i-1]))+1;//状态转移方程
	}
	cout << dp[n];
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	
	int t=1;
	//cin >> t;
	
	while(t--)
	{
		solve();
	}
	return 0;
}