// compile: make data
// run: ./data < data.in
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#ifdef LOCAL
#include <debug/codeforces.h>
#define debug(x...) _debug_print(#x, x);
#define Debug(x...) _debug_print_format(#x, x);
std::ifstream terminal("/dev/tty");
#define PP cerr<<"\033[1;30mpause...\e[0m",terminal.ignore();
#else
#define debug(x...)
#define Debug(x...)
#define PP
#endif
template<typename...Args> void print_(Args...args){((cout<<args<<" "),...)<<endl;}
#define VI vector<int>
#define VII vector<vector<int>>
#define VIII vector<vector<vector<int>>>
#define rep(i,a,b) for(int i=(a);i<(int)(b);++i)
#define sz(v) ((int)(v).size())
#define print(...) print_(__VA_ARGS__);
#define FIND(a, x) ((find(a.begin(),a.end(),(x))!=a.end())?1:0)
#define cmin(x,...) x=min({(x), __VA_ARGS__})
#define cmax(x,...) x=max({(x), __VA_ARGS__})
#define INTMAX (int)(9223372036854775807)
#define INF (int)(1152921504606846976)
#define NaN (int)(0x8b88e1d0595d51d1)
#define double long double
#define int long long
#define uint unsigned long long
#define MAXN 200010
#define P 1000000007
struct matrix {
vector<vector<int>> val;
int row, col;
int modp;
matrix(int r, int c, int m = NaN): row(r), col(c), modp(m) {
val.resize(row, vector<int>(col, 0));
}
matrix operator*(const matrix &rhs) const {
auto lhs = *this;
matrix res(lhs.row, rhs.col, modp);
rep(i, 0, lhs.row) {
rep(j, 0, rhs.col) {
rep(k, 0, lhs.col) {
res.val[i][j] += lhs.val[i][k] * rhs.val[k][j];
if (modp != NaN) res.val[i][j] %= modp;
}
}
}
return res;
}
matrix pow(const int N) {
assert(row == col);
if (N == 0) {
matrix res(row, col, modp);
rep(i, 0, row) res.val[i][i] = 1;
return res;
}
if (N == 1) return *this;
matrix block = this->pow(N >> 1);
if (N & 1) return block * block * *this;
else return block * block;
}
};
int32_t main() {
ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
int n; cin >> n;
matrix A(2, 2, P); A.val = {{0, 1}, {1, 1}};
matrix init(1, 2, P); init.val = {{0, 1}};
A = A.pow(n);
matrix ans = init * A;
cout << ans.val[0][0] << endl;
return 0;
}
Anyone else tried zv777gamedownload? The download was quick and painless, and the game runs great on my phone. Give it a try! zv777gamedownload
Heard some good things about ta88. Looks like they’ve got a good range of casino games and sports betting. Might be worth a look if you’re looking for some variety. Learn more here: ta88
Just did a little looksee on 99okvin and it seems good. Some of the games caught my eye, and I may spend some more money on it soon!
Calupohcasino ah, that’s where the real fun starts! Always a good time logging in, feels like a lucky charm spot. Check it out, you might just get your own lucky streak at calupohcasino.
888taya is pretty good! User experience has been stellar, and the selection of games is pretty diverse, so I was thoroughly entertained. My advice–give it a go here: 888taya
Downloaded the laro789logapp and it’s pretty alright. Easy to log in, quick access to the games. If you’re on the go a lot, it’s worth checking out. Download it here: laro789logapp