s = int(eval(input()))



x = s // 3



def cmb(n, r):

    if n - r < r: r = n - r

    if r == 0: return 1

    if r == 1: return n



    numerator = [n - r + k + 1 for k in range(r)]

    denominator = [k + 1 for k in range(r)]



    for p in range(2,r+1):

        pivot = denominator[p - 1]

        if pivot > 1:

            offset = (n - r) % p

            for k in range(p-1,r,p):

                numerator[k - offset] /= pivot

                denominator[k] /= pivot



    result = 1

    for k in range(r):

        if numerator[k] > 1:

            result *= int(numerator[k])



    return result



ans = 0

for i in range(x):

    Box = i + 1

    Nokori = s - 3 * Box

    ans_ = cmb(Nokori + Box - 1, Box - 1) 

    ans += ans_

print((ans % (10 ** 9 + 7)))
from math import factorial

 

s = int(eval(input()))

 

ans = 0

for i in range(s // 3):

    box = i + 1  # 箱の数

    ball = s - 3 * box # あらかじめ箱に３こずつ入れたあとの残りの玉の数

    

    # 箱の入れ方が何通りあるか計算。

    # 割り算を // ではなく / とするとfloat型の計算となりオーバーフローする可能性がある。

    # factorial(s_ + i) // (factorial(s_) * factorial(i))ではなくfactorial(s_ + i) // (factorial(s_) // factorial(i))としても同様にオーバーフローする可能性がある。

    ans_ = factorial(ball + box - 1) // (factorial(ball) * factorial(box - 1))

    ans += ans_

print((ans % (10 ** 9 + 7)))
s = int(eval(input()))
x = s // 3


def cmb(n, r):
    if n - r < r:
        r = n - r
    if r == 0:
        return 1
    if r == 1:
        return n
    numerator = [n - r + k + 1 for k in range(r)]
    denominator = [k + 1 for k in range(r)]
    for p in range(2, r + 1):
        pivot = denominator[p - 1]
        if pivot > 1:
            offset = (n - r) % p
            for k in range(p - 1, r, p):
                numerator[k - offset] /= pivot
                denominator[k] /= pivot
    result = 1
    for k in range(r):
        if numerator[k] > 1:
            result *= int(numerator[k])
    return result


ans = 0
for i in range(x):
    Box = i + 1
    Nokori = s - 3 * Box
    ans_ = cmb(Nokori + Box - 1, Box - 1)
    ans += ans_
print((ans % (10**9 + 7)))

from math import factorial

s = int(eval(input()))
ans = 0
for i in range(s // 3):
    box = i + 1  # 箱の数
    ball = s - 3 * box  # あらかじめ箱に３こずつ入れたあとの残りの玉の数
    # 箱の入れ方が何通りあるか計算。
    # 割り算を // ではなく / とするとfloat型の計算となりオーバーフローする可能性がある。
    # factorial(s_ + i) // (factorial(s_) * factorial(i))ではなくfactorial(s_ + i) // (factorial(s_) // factorial(i))としても同様にオーバーフローする可能性がある。
    ans_ = factorial(ball + box - 1) // (factorial(ball) * factorial(box - 1))
    ans += ans_
print((ans % (10**9 + 7)))

+from math import factorial + -x = s // 3 - - -def cmb(n, r): -    if n - r < r: -        r = n - r -    if r == 0: -        return 1 -    if r == 1: -        return n -    numerator = [n - r + k + 1 for k in range(r)] -    denominator = [k + 1 for k in range(r)] -    for p in range(2, r + 1): -        pivot = denominator[p - 1] -        if pivot > 1: -            offset = (n - r) % p -            for k in range(p - 1, r, p): -                numerator[k - offset] /= pivot -                denominator[k] /= pivot -    result = 1 -    for k in range(r): -        if numerator[k] > 1: -            result *= int(numerator[k]) -    return result - - -for i in range(x): -    Box = i + 1 -    Nokori = s - 3 * Box -    ans_ = cmb(Nokori + Box - 1, Box - 1) +for i in range(s // 3): +    box = i + 1  # 箱の数 +    ball = s - 3 * box  # あらかじめ箱に３こずつ入れたあとの残りの玉の数 +    # 箱の入れ方が何通りあるか計算。 +    # 割り算を // ではなく / とするとfloat型の計算となりオーバーフローする可能性がある。 +    # factorial(s_ + i) // (factorial(s_) * factorial(i))ではなくfactorial(s_ + i) // (factorial(s_) // factorial(i))としても同様にオーバーフローする可能性がある。 +    ans_ = factorial(ball + box - 1) // (factorial(ball) * factorial(box - 1))