//#define _GLIBCXX_DEBUG #include using namespace std; using ll = long long; using ld = long double; using ull = unsigned long long; using uint = unsigned; using pii = pair; using pll = pair; template using pq = priority_queue>; template using pqg = priority_queue, greater>; const ll MOD = 1000000007; const ll MODD = 998244353; #define overload4(_1, _2, _3, _4, name, ...) name #define overload3(_1, _2, _3, name, ...) name #define rep1(n) for(ll i = 0; i < (ll)(n); i++) #define rep2(i, n) for(ll i = 0; i < (ll)(n); i++) #define rep3(i, a, b) for(ll i = (ll)(a); i < (ll)(b); i++) #define rep4(i, a, b, c) for(ll i = (ll)(a); i < (ll)(b); i += (ll)(c)) #define rep(...) overload4(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__) #define rrep1(n) for(ll i = (ll)(n); i >= (ll)(0); i--) #define rrep2(i, n) for(ll i = (ll)(n); i >= (ll)(0); i--) #define rrep3(i, a, b) for(ll i = (ll)(a); i >= (ll)(b); i--) #define rrep4(i, a, b, c) for(ll i = (ll)(a); i >= (ll)(b); i -= (ll)(c)) #define rrep(...) overload4(__VA_ARGS__, rrep4, rrep3, rrep2, rrep1)(__VA_ARGS__) #define all(v) v.begin(), v.end() #define elif else if #define eb emplace_back #define mp make_pair #define mt make_tuple #define fi first #define se second #define stoi stoll #define MIN(v) *min_element(all(v)) #define MAX(v) *max_element(all(v)) const ll dx[4] = {0, 0, 1, -1}; const ll dy[4] = {1, -1, 0, 0}; //#include //using namespace atcoder; template vector> mul(vector> &A, vector> &B, T mod){ vector> ret(A.size(), vector(B[0].size())); rep(i, A.size())rep(j, B[0].size())rep(k, B.size()){ (ret[i][j] += A[i][k] * B[k][j]) %= mod; } return ret; } template vector> pow(vector> A, T n, T mod){ vector> ret(A.size(), vector(A[0].size())); rep(A.size()) ret[i][i] = 1; while(n > 0){ if(n & 1) ret = mul(ret, A, mod); A = mul(A, A, mod); n >>= 1; } return ret; } int main(){ ll N; cin >> N; vector> A(2, vector(2)); vector B(2); B[0] = 1, B[1] = 0; A[0][0] = 1, A[0][1] = 1, A[1][0] = 1, A[1][1] = 0; A = pow(A, N, MODD); cout << A[0][1]+A[1][1]-1 << endl; return 0; }