package chelper; import io.InputReader; import io.OutputWriter; import prep.LongMod; import solutions.ChelperSolution; public class TaskC extends ChelperSolution { { gcj = true; } public void solve(int testNumber, InputReader in, OutputWriter out) { super.solve(testNumber, in, out); } final LongMod MOD = new LongMod(1000000007L); int N = 1001000; long[] inverses = new long[N]; @Override protected void precalc() { for (int i = 2; i < N; i++) { inverses[i] = MOD.inversePrime(i - 1); } } @Override public void solve(int testNumber) { int n = in.nextInt(); int k = in.nextInt(); long x1 = in.nextInt(); long y1 = in.nextInt(); long C = in.nextInt(); long D = in.nextInt(); long E1 = in.nextInt(); long E2 = in.nextInt(); long FVal = in.nextInt(); LongMod F = new LongMod(FVal); long[] x = new long[n]; long[] y = new long[n]; x[0] = F.mod(x1); y[0] = F.mod(y1); for (int i = 1; i < n; i++) { x[i] = F.sum( F.prod(x[i - 1], C), F.prod(y[i - 1], D), E1 ); y[i] = F.sum( F.prod(x[i - 1], D), F.prod(y[i - 1], C), E2 ); } long[] a = new long[n]; for (int i = 0; i < n; i++) { a[i] = F.sum(x[i], y[i]); } long[] numPowers = new long[n + 1]; numPowers[1] = MOD.mod(k); for (int i = 2; i <= n; i++) { numPowers[i] = MOD.prod( i, MOD.sub(MOD.pow(i, k), 1), inverses[i] ); } long res = 0; long numSum = 0; for (int i = 0; i < n; i++) { numSum = MOD.sum(numSum, numPowers[i + 1]); res = MOD.sum( res, MOD.prod( a[i], n - i, numSum ) ); } debug.println("hi"); out.println(res); } }