1+ #!usr/bin/env python3
2+ from collections import defaultdict , deque , Counter , OrderedDict
3+ from bisect import bisect_left , bisect_right
4+ from functools import reduce , lru_cache
5+ from heapq import heappush , heappop , heapify
6+
7+ import itertools
8+ import math , fractions
9+ import sys , copy
10+
11+ def L (): return sys .stdin .readline ().split ()
12+ def I (): return int (sys .stdin .readline ().rstrip ())
13+ def SL (): return list (sys .stdin .readline ().rstrip ())
14+ def LI (): return [int (x ) for x in sys .stdin .readline ().split ()]
15+ def LI1 (): return [int (x ) - 1 for x in sys .stdin .readline ().split ()]
16+ def LS (): return [list (x ) for x in sys .stdin .readline ().split ()]
17+ def R (n ): return [sys .stdin .readline ().strip () for _ in range (n )]
18+ def LR (n ): return [L () for _ in range (n )]
19+ def IR (n ): return [I () for _ in range (n )]
20+ def LIR (n ): return [LI () for _ in range (n )]
21+ def LIR1 (n ): return [LI1 () for _ in range (n )]
22+ def SR (n ): return [SL () for _ in range (n )]
23+ def LSR (n ): return [LS () for _ in range (n )]
24+
25+ def perm (n , r ): return math .factorial (n ) // math .factorial (r )
26+ def comb (n , r ): return math .factorial (n ) // (math .factorial (r ) * math .factorial (n - r ))
27+
28+ def make_list (n , * args , default = 0 ): return [make_list (* args , default = default ) for _ in range (n )] if len (args ) > 0 else [default for _ in range (n )]
29+
30+ dire = [[1 , 0 ], [0 , 1 ], [- 1 , 0 ], [0 , - 1 ]]
31+ dire8 = [[1 , 0 ], [1 , 1 ], [0 , 1 ], [- 1 , 1 ], [- 1 , 0 ], [- 1 , - 1 ], [0 , - 1 ], [1 , - 1 ]]
32+ alphabets = "abcdefghijklmnopqrstuvwxyz"
33+ ALPHABETS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
34+ MOD = 1000000007
35+ INF = float ("inf" )
36+
37+ sys .setrecursionlimit (1000000 )
38+
39+ class FactInv :
40+ def __init__ (self , N , MOD = 1000000007 ):
41+ fact , inv = [1 ]* (N + 1 ), [None ]* (N + 1 )
42+ for i in range (1 , N + 1 ): fact [i ] = fact [i - 1 ] * i % MOD
43+ inv [N ] = pow (fact [N ], MOD - 2 , MOD )
44+ for i in range (N )[::- 1 ]: inv [i ] = inv [i + 1 ] * (i + 1 ) % MOD
45+ self .N , self .MOD , self .fact , self .inv = N , MOD , fact , inv
46+
47+ def perm (self , a , b ):
48+ if a > self .N or b > self .N : raise ValueError ("\n Permutaion arguments are bigger than N\n N = {}, a = {}, b = {}" .format (self .N , a , b ))
49+ return self .fact [a ] * self .inv [a - b ] % self .MOD
50+
51+ def comb (self , a , b ):
52+ if a > self .N or b > self .N : raise ValueError ("\n Combination arguments are bigger than N\n N = {}, a = {}, b = {}" .format (self .N , a , b ))
53+ return self .fact [a ] * self .inv [b ] * self .inv [a - b ] % self .MOD
54+
55+ def main ():
56+ S = I ()
57+ n = math .floor (S / 3.0 )
58+ factinv = FactInv (S )
59+
60+ ans = 0
61+ for i in range (1 , n + 1 ):
62+ ans = (ans + factinv .comb (S - 2 * i - 1 , i - 1 )) % MOD
63+ print (ans % MOD )
64+
65+ if __name__ == '__main__' :
66+ main ()
0 commit comments