Problem:
Score : 400 points

Problem Statement

You start with the number 0 and you want to reach the number N.

You can change the number, paying a certain amount of coins, with the following operations:

Multiply the number by 2, paying A coins.

Multiply the number by 3, paying B coins.

Multiply the number by 5, paying C coins.

Increase or decrease the number by 1, paying D coins.

You can perform these operations in arbitrary order and an arbitrary number of times.

What is the minimum number of coins you need to reach N?

You have to solve T testcases.

Constraints

1 \le T \le 10

1 \le N \le 10^{18}

1 \le A, B, C, D \le 10^9

All numbers N, A, B, C, D are integers.

Input

The input is given from Standard Input. The first line of the input is

T

Then, T lines follow describing the T testcases.
Each of the T lines has the format

N A B C D

Output

For each testcase, print the answer on Standard Output followed by a newline.

Sample Input 1

5
11 1 2 4 8
11 1 2 2 8
32 10 8 5 4
29384293847243 454353412 332423423 934923490 1
900000000000000000 332423423 454353412 934923490 987654321

Sample Output 1

20
19
26
3821859835
23441258666

For the first testcase, a sequence of moves that achieves the minimum cost of 20 is:

Initially x = 0.

Pay 8 to increase by 1 (x = 1).

Pay 1 to multiply by 2 (x = 2).

Pay 1 to multiply by 2 (x = 4).

Pay 2 to multiply by 3 (x = 12).

Pay 8 to decrease by 1 (x = 11).

For the second testcase, a sequence of moves that achieves the minimum cost of 19 is:

Initially x = 0.

Pay 8 to increase by 1 (x = 1).

Pay 1 to multiply by 2 (x = 2).

Pay 2 to multiply by 5 (x = 10).

Pay 8 to increase by 1 (x = 11).

Solution in C++ (GCC 9.2.1) (judge verdict: Accepted)

#include<bits/stdc++.h>
#define ll long long int
#define mk make_pair
#define pb push_back
#define INF (ll)1e18
#define pii pair<ll,ll>
#define mod 1000000007 //998244353
#define f(i,a,b) for(ll i=a;i<b;i++)
#define fb(i,a,b) for(ll i=a;i>b;i--)
#define ff first
#define ss second
#define PI 3.141592653589793238
#define pq priority_queue<ll>
#define pqr priority_queue<ll,vector<ll>,greater<ll>()>
using namespace std;
ll pow_mod(ll a,ll b)
{
	ll res=1;
	while(b!=0)
	{
		if(b&1)
		{
			res=(res*a)%mod;
		}
		a=(a*a)%mod;
		b/=2;
	}
	return res;
}
map<ll,ll>mp;
ll n,a,b,c,d;

ll solve(ll x){
    if(x==0)
    return 0;
    
    if(x==1)
    return d;
    
    if(mp[x]>0)
    return mp[x];
    
    ll mn;
    if(d>INF/x)
    mn=INF;
    else
    mn=min(d*x,INF);
    
    ll l2,r2,l3,r3,l5,r5;
    
    l2=x/2;
    r2=(x+1)/2;
    
    r3=(x+2)/3;
    l3=x/3;
    
    l5=x/5;
    r5=(x+4)/5;
    
    if(x%2==0)
    mn=min(mn,a+solve(x/2));
    
    if(x%3==0)
    mn=min(mn,b+solve(x/3));
    
    
    if(x%5==0)
    mn=min(mn,c+solve(x/5));
    ll t;
    
    mn=min(mn,(x%2)*d+a+solve(l2));
    t=2-x%2;
    if(t==2)
    t=0;
    
   mn=min(mn,t*d+a+solve(r2));
    
    
    t=3-x%3;
    if(t==3)
    t=0;
    
    
    mn=min(mn,(x%3)*d+b+solve(l3));
    mn=min(mn,t*d+b+solve(r3));
    
    
    t=5-x%5;
    if(t==5)
    t=0;
    
    mn=min(mn,(x%5)*d+c+solve(l5));
    mn=min(mn,t*d+c+solve(r5));
    
    return mp[x]=mn;
    
}
void find()
{
    cin>>n>>a>>b>>c>>d;
    
    ll ans=solve(n);
    
    mp.clear();
    cout<<ans<<endl;
}
int32_t main()
{    ios_base::sync_with_stdio(false);
     cin.tie(NULL);
     cout.tie(NULL);
     
//Start from Here.

  ll t;
  t=1;
  cin>>t;
  while(t--)
  find();
  
//Good Bye!
    return 0;
}