package main import . "fmt" type Mat struct { a,b int c,d int } type Vec struct { s int t int } func (m1 *Mat) MulMat(m2 *Mat, k int) *Mat { return &Mat{ a: ((m1.a*m2.a)%k + (m1.b*m2.c)%k)%k, b: ((m1.a*m2.b)%k + (m1.b*m2.d)%k)%k, c: ((m1.c*m2.a)%k + (m1.d*m2.c)%k)%k, d: ((m1.c*m2.b)%k + (m1.d*m2.d)%k)%k, } } func (m *Mat) MulVec(v *Vec, k int) *Vec { return &Vec{ s: ((m.a*v.s)%k+(m.b*v.t)%k)%k, t: ((m.c*v.s)%k+(m.d*v.t)%k)%k, } } func (m *Mat) Pow(n int, k int) *Mat{ if n == 0 { return &Mat{ 1, 0, 0, 1, } } else if n == 1 { return m } else if n % 2 == 0 { dm := m.MulMat(m, k) return dm.Pow(n/2, k) } else { dm := m.MulMat(m, k) return dm.Pow(n/2, k).MulMat(m, k) } } func main() { var m Mat var v Vec var n int var k int Scan(&m.a,&m.b,&m.c,&m.d,&v.s,&v.t,&n,&k) ans := m.Pow(n, k).MulVec(&v, k) Println((ans.s+k)%k, (ans.t+k)%k) }