- #include <iostream>
- #include <cstring>
- #include <cstdio>
- #include <algorithm>
- #include <queue>
- #include <map>
- #include <set>
- #include <vector>
- using namespace std;
- typedef long long ll;
- const ll MOD = 2147493647;
- struct Maxt {
- ll mp[8][8];
- Maxt() {
- for(int i = 1; i<=7; i++) {
- for(int j = 1; j<=7; j++) {
- mp[i][j] = 0;
- }
- }
- }
- } fp,tmp;
- int n,a,b,T;
- int read() {
- int res = 0;
- char op;
- op = getchar();
- if(op>='0' && op<='9') {
- res = op-'0';
- op = getchar();
- }
- while(op>='0' && op<='9') {
- res = res*10 + op-'0';
- op = getchar();
- }
- return res;
- }
- void init() {
- for(int i = 1; i<=7; i++) {
- for(int j =1; j<=7; j++) {
- fp.mp[i][j] = 0;
- tmp.mp[i][j] = 0;
- }
- }
- fp.mp[1][1] = 1,fp.mp[2][1] = 1,fp.mp[2][2] = 1,fp.mp[7][6] = 1;
- fp.mp[3][1] = 1,fp.mp[3][2] = 2,fp.mp[3][3] = 1,fp.mp[4][1] = 1;
- fp.mp[4][2] = 3,fp.mp[4][3] = 3,fp.mp[4][4] = 1,fp.mp[5][1] = 1;
- fp.mp[5][2] = 4,fp.mp[5][3] = 6,fp.mp[5][4] = 4,fp.mp[5][5] = 1;
- fp.mp[6][5] = 1,fp.mp[6][6] = 1,fp.mp[6][7] = 2;
- tmp.mp[1][1] = 1,tmp.mp[2][1] = 3,tmp.mp[3][1] = 9,tmp.mp[4][1] = 27,tmp.mp[5][1] = 81,tmp.mp[6][1] = b,tmp.mp[7][1] = a;
- }
- Maxt Maxtcalc(const Maxt& a,const Maxt& b) {
- Maxt t;
- for(int i = 1; i<=7; i++) {
- for(int j = 1; j<=7; j++) {
- t.mp[i][j] = 0;
- for(int k = 1; k<=7; k++) {
- t.mp[i][j] = (t.mp[i][j] + (a.mp[i][k]*b.mp[k][j]) % MOD) % MOD;
- }
- }
- }
- return t;
- }
- Maxt qcalc(int x,Maxt s) {
- Maxt tmp;
- for(int i = 1; i<=7; i++) {
- tmp.mp[i][i] = 1;
- }
- while(x) {
- if(x&1) {
- tmp = Maxtcalc(tmp, s);
- }
- s = Maxtcalc(s, s);
- x>>=1;
- }
- return tmp;
- }
- int main() {
- T = read();
- while(T--) {
- n = read();
- a = read();
- b= read();
- if(n == 1) {
- printf("%d\n",a);
- continue;
- }
- if(n == 2) {
- printf("%d\n",b);
- continue;
- }
- if(n == 3) {
- printf("%d\n",81+2*a+b);
- continue;
- }
- n = n-2;
- init();
- fp = qcalc(n,fp);
- Maxt ans = Maxtcalc(fp, tmp);
- printf("%lld\n",ans.mp[6][1]%MOD);
- }
- return 0;
- }
- /*
- 样例输入:
- 2
- 3 1 2
- 4 1 10
- 样例输出:
- 85
- 369
- */