Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Author :- maxwell_008(Swapnil Gharat)
- */
- #include <bits/stdc++.h>
- using namespace std;
- #define INF 4e18
- #define N 100005
- #define FOR(n) for(ll i=0;i<n;++i)
- #define FORD(i,a,b) for(ll i=a;i>=b;--i)
- #define pb push_back
- #define mp make_pair
- #define all(x) x.begin(),x.end()
- #define ll long long int
- #define s(x) scanf("%d", &x)
- #define sd(x) scanf("%lf", &x)
- #define sl(x) scanf("%lld", &x)
- #define mod 1000000007
- #define fi first
- #define se second
- #define p(x) printf("%d",x)
- #define pl(x) printf("%lld", x)
- #define pd(x) printf("%lf", x)
- #define pn() printf("\n")
- #define vi(v) vector<int>v
- #define vl(v) vector<long long int>v
- #define pii pair<int,int>
- #define pll pair<long long int,long long int>
- #define len(s) s.lenGth()
- #define start_code ios_base::sync_with_stdio(0)
- void input(ll n,ll a[]){FOR(n) scanf("%lld", &a[i]);}
- ll bin_expo(ll A, ll B, ll M){ll res = 1LL;while (B > 0){if(B % 2 == 1){res = (res * A) % M;}A = (A * A) % M; B = B / 2;}return res;}
- #define LOGN 20
- bool isPrime[N+1];
- void sieve() {
- ll i, j;
- memset(isPrime, true, sizeof(isPrime));
- for(i = 2; i*i <= N; i++) {
- if(isPrime[i] == true) {
- for(j = i*i; j <= N; j = j+i)
- isPrime[j] = false;
- }
- }
- }
- ll gcd(ll a, ll b)
- {
- if( b == 0)
- return a;
- return gcd(b,a%b);
- }
- ll lcm(ll a, ll b)
- {
- return (a*b)/gcd(a, b);
- }
- ll mat[7][7] = {
- {1LL,1LL,1LL,1LL,0LL,0LL,1LL},
- {0LL,1LL,1LL,1LL,0LL,0LL,1LL},
- {0LL,0LL,1LL,1LL,0LL,0LL,1LL},
- {0LL,0LL,0LL,1LL,0LL,0LL,1LL},
- {0LL,0LL,0LL,0LL,0LL,0LL,-1LL},
- {0LL,0LL,0LL,0LL,1LL,0LL,-1LL},
- {0LL,0LL,0LL,0LL,0LL,1LL,-1LL}
- };
- ll init[7]={6LL,8LL,10LL,12LL,-1LL,-1LL,-1LL};
- ll a,b,c,p,q,r,k,tmp[7][7];
- ll result[7][7];
- void matmul(ll a[][7],ll b[][7],ll ans[][7])
- {
- for(int i=0;i<7;i++)
- {
- for(int j=0;j<7;j++)
- {
- ans[i][j] = 0;
- for(int k=0;k<7;k++)
- {
- ans[i][j] = ((ans[i][j]%mod) + ((a[i][k]%mod)*(b[k][j]%mod))%mod)%mod;
- }
- ans[i][j]%=mod;
- }
- }
- }
- void solve()
- {
- for(int i = 0; i < 7; i++)
- for(int j = 0; j < 7; j++)
- if(i == j)
- result[i][j] = 1;
- else
- result[i][j] = 0;
- ll n = k-2;
- while(n>0)
- {
- if( n & 1)
- {
- matmul(result,mat,tmp);
- for(int i=0;i<7;i++)
- {
- for(int j=0;j<7;j++)
- {
- result[i][j] = tmp[i][j];
- }
- }
- }
- matmul(mat,mat,tmp);
- for(int i=0;i<7;i++)
- {
- for(int j=0;j<7;j++)
- {
- mat[i][j] = tmp[i][j];
- }
- }
- n/=2;
- }
- ll fin_ans=0;
- for(int i=0;i<7;i++)
- {
- fin_ans = ((fin_ans%mod) + ((init[i]%mod) * (result[i][6]%mod))%mod)%mod;
- }
- cout<<fin_ans<<endl;
- }
- int main()
- {
- cin>>a>>b>>c>>p>>q>>r>>k;
- mat[4][6]=c;
- mat[5][6]=b;
- mat[6][6]=a;
- init[4] = p;
- init[5] = q;
- init[6] = r;
- solve();
- return 0;
- }
Add Comment
Please, Sign In to add comment