Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- +---------------------------------------------+
- | |
- | © 29/01/2024 (15:37) MinaMagdy |
- | |
- +---------------------------------------------+
- */
- #include <bits/stdc++.h>
- #include <ext/pb_ds/assoc_container.hpp>
- #include <ext/pb_ds/tree_policy.hpp>
- using namespace std;
- using namespace __gnu_pbds;
- #define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
- #define multi_ordered_set tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update>
- #define endl "\n"
- #define MOD 1000000007
- #define INF 2000000000
- #define all(s) s.begin(), s.end()
- #define rall(s) s.rbegin(), s.rend()
- #define sz(x) int(x.size())
- typedef long long ll;
- typedef long double ld;
- typedef unsigned long long ull;
- #include <ext/numeric>
- using namespace __gnu_cxx;
- const int mod = 1000000009;
- typedef vector<vector<int>> matrix;
- struct mul
- {
- int n;
- mul(int n) : n(n) {}
- matrix operator()(const matrix &a, const matrix &b)
- {
- assert(a[0].size() == b.size());
- matrix c(a.size(), vector<int>(b[0].size(), 0));
- for (int i = 0; i < a.size(); i++)
- {
- for (int j = 0; j < b[0].size(); j++)
- {
- for (int k = 0; k < b.size(); k++)
- {
- c[i][j] += a[i][k] * 1ll * b[k][j] % mod;
- if (c[i][j] >= mod)
- c[i][j] -= mod;
- }
- }
- }
- return c;
- }
- };
- matrix identity_element(const mul &m)
- {
- matrix res(m.n, vector<int>(m.n, 0));
- for (int i = 0; i < m.n; i++)
- res[i][i] = 1;
- return res;
- }
- void solve()
- {
- ll n;
- while (cin >> n, n)
- {
- matrix m = {
- {0, 1, 0},
- {0, 0, 1},
- {1, 1, 1}};
- matrix f1 = {
- {0},
- {1},
- {2}};
- mul mm(3);
- cout << mm(power(m, n - 1, mm), f1)[0][0] << endl;
- }
- }
- int main(void)
- {
- ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
- int testcase = 1;
- // cin >> testcase;
- while (testcase--)
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement