#include <stdio.h>
// 입력 : d(소수값을 확인하는 정수)
// 출력 : d가 소수이면 1, 아니면 0
int is_prime(int d)
{
// i = 약수
for (int i = 2; i < d; i++)
{
// 만약 d % i를 했는데 0이 나오면 i가 약수이므로 d는 소수가 아니니
// 0을 리턴한다.
if (d % i == 0) return 0;
}
// 2부터 d - 1까지 약수가 하나도 없다면 1을 리턴한다.
return 1;
}
int main()
{
long long n;
scanf("%lld", &n);
// a = 오늘 칭찬 스티커를 받은 학생 수
// b = 지금까지 칭찬 스티커를 받은 학생 수
long long a = 1, b = 1;
// 3월 1일부터 스티커를 주기 시작하므로
// month를 3, days를 1로 설정한다.
int month = 3;
int days = 1;
// count에는 며칠이 걸리는지 저장하므로 1로 정해준다.
int count = 1;
while (1)
{
// 종료 조건 : 칭찬 스티커를 n 이상 받았을 경우
if (b >= n)
{
printf("%d", count);
return 0;
}
// days를 1 만큼 늘려서 시간이 갔음을 표현하고
// count를 1 만큼 늘려 정답을 만든다.
days++;
count++;
// 가장 큰 테스트 케이스의 정답이 4월 달 안에서 끝났으므로(n = 1e17일 떄 49일 걸림)
// 3월 31 다음인 4월 1일로 설정
if (days > 31)
{
// month를 1 올려 다음 달로 넘어가고
// days를 1로 하여 다음달의 시작점을 저장시킨다.
month++;
days = 1;
}
// 칭찬 스티커 배급
if (is_prime(days))
{
// days가 소수이므로 3을 곱해준다.
a *= 3;
// b에 a를 누적한다.
b += a;
}
else
{
// days가 소수가 아니므로 2를 곱해준다.
a *= 2;
// b에 a를 누적한다.
b += a;
}
}
}