# 条件分けVer
# 入力
Y = int(input())
# 余り
mod = Y % 4
L = [2,1,0,3] # 余りの値によって、次の開催年までに足りない年数を記録
print(Y + L[mod])
# 愚直シミュレーションVer
# 入力
Y = int(input())
# 4で割った余りが2になる年になるまで一生続ける…!
while True:
# もし4で割った余りが2なら、その年で終わり!
if Y % 4 == 2:
print(Y)
exit()
# 開催されませんでした。来年また判定しましょう。
Y += 1
# 上級者向け計算一発Ver
# 入力
Y = int(input())
# 計算一発パート
ans = (Y+1)//4*4+2
# 出力
print(ans)
from itertools import combinations
# 入力
N, M = map(int, input().split())
# 辺を貼る隣接行列をここに作ります!
edge_L = [[0] * N for _ in range(N)]
# 辺の入力をM本分受け取っていきますー。
for i in range(M):
u, v = map(int, input().split())
# 0-indexedに戻して…
u -= 1
v -= 1
# u→vに辺が張られてるので、1
edge_L[u][v] = 1
# v→uにも辺が張られてるので、1
edge_L[v][u] = 1
# 答えを足していくよ!
ans = 0
# combinationsでa,b,cを一気に出す…!
for a, b, c in combinations(range(N), 3):
# aからbに辺がある、bからcに辺がある、cからaに辺があるなら、三角形成立!+1!
if edge_L[a][b] and edge_L[b][c] and edge_L[c][a]:
ans += 1
# できた三角形の数を出力しておわり!
print(ans)
# 入力
N = int(input())
A_L = list(map(int, input().split()))
same_cnt = 0 # インデックスと要素が同じものの個数
diff_cnt = 0 # インデックスと要素が異なるもので、入れ違いペアが同じになるものの個数
# 1-indexedで要素を見ていくよ!
for i, a in enumerate(A_L, 1):
# もしindexと値が一緒なら、カウント
if i == a:
same_cnt += 1
# もしindexと値が違うけど…→a番目の値がiになるものの数をカウント
elif A_L[a - 1] == i:
diff_cnt += 1
# same_cntは、n*(n-1)//2、同じものは2回重複して数えられているので//2したものが答え!
ans = diff_cnt // 2
ans += (same_cnt*(same_cnt-1))//2
# 答え出力しておわり!
print(ans)
# 入力
N = int(input())
A_L = list(map(int, input().split()))
mod = 998244353
ans = 0
# 最終的に何個選ぶの?
for finally_cnt in range(1, N + 1):
# dpテーブルを毎回作り直すよ!
dp = [[0] * (finally_cnt + 5) for _ in range(finally_cnt + 5)]
# 0個選んで、「総和%最終的に選ぶ個数」が0になるのは1通り。当たり前!
dp[0][0] = 1
# aの要素を左から順に見ていくよ!
for a in A_L:
# 今いくつ取ってる?これは遷移したら2→3になっちゃうので、大きい方から取る!
# パラメータとして「今何番目まで見てるよ!」をinline:埋め込んじゃったので!
for already_get_cnt in range(finally_cnt - 1, -1, -1):
# 総和を最終的に選ぶ数で割った余りはいくつ?
for mod_num in range(finally_cnt):
# 選ぶ方だけ遷移!
dp[already_get_cnt + 1][(mod_num + a) % finally_cnt] += dp[already_get_cnt][mod_num]
dp[already_get_cnt + 1][(mod_num + a) % finally_cnt] %= mod
# 選ばない方はそのままでOK!
# パラメータとして「今何番目まで見てるよ!」をinline:埋め込んじゃったので!
# 最終的に選ぶ個数だけ選んだ状態で、mod0になったものの数を答えに足していくよ!
ans += dp[finally_cnt][0]
ans %= mod
# 答えを出力して終わり!
print(ans)
# 入力
N, M, K = map(int, input().split())
mod = 998244353
# 次数カウンター用配列
deg_L = [0] * N
# とりあえず前準備として、階乗を事前計算…ここでmod取って良いのが良き。
kaijo = [1]
gyaku = [1]
for i in range(1, 2 * (10 ** 5) + 10):
kaijo.append(kaijo[-1] * i % mod)
gyaku.append(pow(kaijo[i], mod - 2, mod))
# nCrを、事前にmod取った値で計算してる&階乗も逆元もメモ化的に事前計算してるので、速い!
def comb(n, r):
if r < 0:
return 0
if n < r:
return 0
return kaijo[n] * gyaku[r] * gyaku[n - r] % mod
for i in range(M):
u, v = map(int, input().split())
u -= 1
v -= 1
deg_L[u] ^= 1
deg_L[v] ^= 1
odd_node_cnt = deg_L.count(1) # 次数が奇数の頂点の数
even_node_cnt = N - odd_node_cnt # 次数が偶数の頂点の数
ans = 0
# 次数が奇数の頂点をいくつ塗る?を全探索していくよ
for odd_paint_cnt in range(0, K + 1, 2):
# 奇数個塗っちゃうと異色辺が奇数本になるのでダメー
if odd_paint_cnt % 2 == 1:
continue
# 赤の頂点に足りない分は、次数が偶数の頂点を塗るよ
even_paint_cnt = K - odd_paint_cnt
# 次数が奇数の頂点の中から、赤く塗る個数を選ぶ組み合わせ
odd_comb = comb(odd_node_cnt, odd_paint_cnt)
# 次数が偶数の頂点の中から、赤く塗る個数を選ぶ組み合わせ
even_comb = comb(even_node_cnt, even_paint_cnt)
# 組み合わせ同士を書けたものを足して…mod取ってあげる
ans += odd_comb * even_comb % mod
ans %= mod
print(ans)