// 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
namespace math {
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;
math::matrix A(6, 6, P), init(1, 6, P);
A.val = {
{0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 1},
{0, 1, 0, 0, 0, 1},
{0, 0, 1, 0, 0, 1},
{0, 0, 0, 1, 0, 1},
{0, 0, 0, 0, 1, 1}
};
init.val = {
{1, 1, 2, 4, 8, 16}
};
A = A.pow(n);
auto ans = init * A;
cout << ans.val[0][0] << endl;
return 0;
}
Mxbetcasino, un casino más para la lista! Ya veremos si vale la pena. A ver si la pasamos bien y ganamos algo. Visita mxbetcasino.
I’m on the hunt for a killer sicbo online experience! If sicbogames.com has what I’m looking for, then I’m stay. You can find it by going here sicbo online.
Yo, check out leavenk88! Heard some buzz about it. Anyone tried it out? Lemme know if it’s worth my time and wallet!