"""
(실전 문제) 바닥 공사 p, 223

- [ 가로의 길이가 N ], [ 세로의 길이가 2인 ]직사각형 형태의 얇은 바닥이 있다. 
  태일이는 이 얇은 바닥을 [ 1 X 2의 덮개, 2 X 1의 덮개, 2 X 2의 덮개를 이용 ]해 채우고자 한다. 
  이 때 바닥을 채우는 모든 경우의 수를 구하는 프로그램을 작성하시오.

- 일직선상에 존재하는 식량창고 중에 [ 서로 인접한 식량창고가 공격받으면 ] 바로 알아챌 수 있다.

------------------------------------------------------------------------------
[ 입력 조건 ]

- [ 첫째 줄 ]에 N이 주어진다. (1 <= N <= 1,000)  

[ 출력 조건 ]

- 첫째 줄에 2 X N ( 세로 * 가로 ) 크기의 바닥을 채우는 방법의 수를 796,796으로 나눈 나머지를 출력한다.

[ 입력 ]                     [ 출력 ]
 3                             5
   
※ dp 테이블을 특정 크기만큼 만들어주고, 점화식에 맞게 하나씩 채워주면 된다.
   즉, 점화식을 찾는게 dp에서 가장큰 핵심이라고 할 수 있다.

"""

# 정수 N을 입력 받기
n = int(input())

# 앞서 계산된 결과를 저장하기 위한 DP 테이블 초기화
d = [0] * 1001

# 다이나믹 프로그래밍(Dynamic Programming) 진행 (보텀업)
d[1] = 1 # 가로1 세로2 일때 경우의 수
d[2] = 3 # 가로2 세로2 일때 경우의 수
for i in range(3, n + 1):
    # [ 가로 1을 남겨두고 채우는 경우 ]와 중복되는 case는 제외함으로
    # 따라서, i -2 까지 길이가 덮개로 이미 채워져 있으면, 2가지의 경우 밖에 없는거여서 * 2를 해줌.
    d[i] = (d[i - 1] + 2 * d[i - 2]) % 796796

# 계산된 결과 출력
print(d[n])
