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# (Mono-mcs 6.8.0.105) (judge verdict: Wrong Answer)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class Program
{
    static double count = 9023372036854775807;
    static void Main(string[] args)
    {
        double qs = double.Parse(Console.ReadLine());
        var arrList = new List<double[]>();
        for (double k = 1; k <= qs; k++)
        {
            arrList.Add(Console.ReadLine().Split(' ').Select(r => double.Parse(r)).ToArray());
        }
        for (double k = 0; k < qs; k++) {
            double[] arrMoto = arrList[(int)k];
            Money money = new Money(arrMoto[1], arrMoto[2], arrMoto[3], arrMoto[4], arrMoto[0]);
            money.sum += money.d;
            for (double i = 1; i <= 4; i++)
            {
                double a = ValueSum(1, money, i);
            }
            Console.WriteLine(count);
            count = 9023372036854775807;
        }

    }

    public static double ValueSum(double a ,Money money ,double patern)
    {
        if (a == money.n)
        {
            if (money.sum < count) count = money.sum;
            return -1;
        }
        double cost = 0;
        if (a < money.n)
        {
            if (patern == 1)
                {
                    a *= 2;
                    cost += money.a;
                }
                if (patern == 2)
                {
                    a *= 3;
                    cost += money.b;
                }
                if (patern == 3)
                {
                    a *= 5;
                    cost += money.c;
                }
                if (patern == 4)
                {
                    a++;
                    cost += money.d;
                }
            }
            else if (a > money.n)
            {
                double deruta = a - money.n;
                a = money.n;
                cost += money.d * deruta;
                money.sum += cost;
                Money copyMoney = new Money(money);
                double sss = ValueSum(a, copyMoney, 0);
                return 0;
            }

                money.sum += cost;


        if (a < money.n)
        {
            for (double i = 1; i <= 4; i++)
            {
                Money copyMoney = new Money(money);
                double v = ValueSum(a, copyMoney, i);
            }
        }
        //else
        //{
        //    double v = ValueSum(a, money, -1);
        //}
                    return 0;

                
            


    }


  

}

public class Money
{
    public double a;
    public double b;
    public double c;
    public double d;
    public double n;
    public double sum;
    public Money(double a, double b, double c,double d ,double n)
    {
        this.a = a;
        this.b = b;
        this.c = c;
        this.d = d;
        this.n = n;
    }
    public Money(Money s)
    {
       this.a = s.a;
       this.b = s.b;
       this.c = s.c;
       this.d = s.d;
       this.n = s.n;
       this.sum = s.sum;
    }
}