I

 avatar
unknown
c_cpp
a month ago
1.1 kB
3
Indexable
#define _USE_MATH_DEFINES
#include <bits/stdc++.h>
using namespace std;

#define UwU cin.tie(0)->sync_with_stdio(0)
#define nl '\n'
#define REP(n) for (auto _ = (n); _--;)
#define FOR(i, init, n) for (int64_t i = (init), __ = (n); i < __; i++)
#define ROF(i, init, n) for (int64_t i = (init), ___ = (n); i >= ___; i--)
const int64_t mod = 1e9 + 7;

int64_t a, b, c, x, y;
int64_t ar[2][2];
int64_t recur(int64_t x, int64_t y) {
	if (x < 2 && y < 2) return ar[x][y];
	int64_t m = (x > y ? x : y) + 1;
	int64_t i;
	for (i = 0; (1<<i) < m; i++)
		;
	i /= 2;
	cout << "i = " << i << nl;
	cout << "x = " << x << nl;
	cout << "y = " << y << nl;
	if (x >= i) {
		if (y >= i)
			return (recur(x%i, y%i) * c) % mod;
		return (recur(x%i, y%i) * b) % mod;
	}
	if (y >= i)
		return (recur(x%i, y%i) * a) % mod;
	return recur(x%i, y%i) % mod;
}

void solve() {
	cin >> a >> b >> c >> x >> y;
	ar[0][0] = 1;
	ar[0][1] = a;
	ar[1][0] = b;
	ar[1][1] = c;
	cout << recur(x, y) << nl;
}

int main() {
	UwU;
	int ts = 1;
	cin >> ts;
	for (; ts--;) {
		solve();
	}
}
Leave a Comment