import math





def combinations_count(n, r):

    return math.factorial(n) // (math.factorial(n - r) * math.factorial(r))



S = int(eval(input()))

ans = 0

mod = 10 ** 9 + 7

for i in range(1,700):

    x = S - 3 * i

    if x < 0:

        break

    ans += (combinations_count(x + i - 1, i - 1)) % mod

    ans %= mod

print(ans)

import math

#n個からr個とるときの組み合わせの数

def combinations_count(n, r):

    return math.factorial(n) // (math.factorial(n - r) * math.factorial(r))



S = int(eval(input()))

ans = 0

mod = 10 ** 9 + 7

for i in range(1,S // 3 + 1):      #長さiの数列のとき

   

    x = S - 3 * i       #3を分配後の余り

    

    ans += (combinations_count(x + i - 1, i - 1)) % mod  #重複組み合わせを足す

    ans %= mod



print(ans)

import math


def combinations_count(n, r):
    return math.factorial(n) // (math.factorial(n - r) * math.factorial(r))


S = int(eval(input()))
ans = 0
mod = 10**9 + 7
for i in range(1, 700):
    x = S - 3 * i
    if x < 0:
        break
    ans += (combinations_count(x + i - 1, i - 1)) % mod
    ans %= mod
print(ans)

import math

# n個からr個とるときの組み合わせの数
def combinations_count(n, r):
    return math.factorial(n) // (math.factorial(n - r) * math.factorial(r))


S = int(eval(input()))
ans = 0
mod = 10**9 + 7
for i in range(1, S // 3 + 1):  # 長さiの数列のとき
    x = S - 3 * i  # 3を分配後の余り
    ans += (combinations_count(x + i - 1, i - 1)) % mod  # 重複組み合わせを足す
    ans %= mod
print(ans)

- +# n個からr個とるときの組み合わせの数 -for i in range(1, 700): -    x = S - 3 * i -    if x < 0: -        break -    ans += (combinations_count(x + i - 1, i - 1)) % mod +for i in range(1, S // 3 + 1):  # 長さiの数列のとき +    x = S - 3 * i  # 3を分配後の余り +    ans += (combinations_count(x + i - 1, i - 1)) % mod  # 重複組み合わせを足す