MOD = 10**9 + 7 N = int(input()) result = 0 for a1 in range(1, N + 1): dp_prev = [0] * (N + 2) # 1-based indexing dp_prev[a1] = 1 for i in range(2, N + 1): # Compute prefix sums for dp_prev prefix = [0] * (N + 2) for b in range(1, N + 1): prefix[b] = (prefix[b - 1] + dp_prev[b]) % MOD dp_curr = [0] * (N + 2) for a in range(1, N + 1): # Previous box's index is i-1, so condition is b - (i-1) < a => b < a + (i-1) max_b = min(N, a + (i - 1) - 1) if max_b < 1: continue total = (prefix[max_b] - prefix[0]) % MOD # sum from 1 to max_b dp_curr[a] = total dp_prev = dp_curr # After processing all boxes, check if aN <= a1 # Compute prefix sum for the last dp_prev prefix_final = [0] * (N + 2) for a in range(1, N + 1): prefix_final[a] = (prefix_final[a - 1] + dp_prev[a]) % MOD cnt = (prefix_final[a1] - prefix_final[0]) % MOD result = (result + cnt) % MOD print(result)