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 Python (3.8.2) (judge verdict: Wrong Answer)

def search_range(n):
	min_ls = []
	max_ls = []
	for e in [2,3,5]:
		i = 1
		while True:
			if e ** i > n:
				max_ls.append(i)
				min_ls.append(i-1)
				break
			i += 1
	return min_ls, max_ls

t = int(input())

for test_n in range(t):
	# 入力取得
	n,a,b,c,d = [int(e) for e in input().split(" ")[:5]]
	# 探索範囲の計算
	min_ls, max_ls = search_range(n)
	min_n = min(2**min_ls[0], 3**min_ls[1], 5**min_ls[2])
	max_n = max(2**max_ls[0], 3**max_ls[1], 5**max_ls[2])
	# 探索
	min_val = d*n
	for i in range(max_ls[0]):
		for j in range(max_ls[1]):
			for k in range(max_ls[2]):
				temp_n = (2**i)*(3**j)*(5**k)
				# print("%d/%d, %d/%d, %d/%d"%(i, max_ls[0], j, max_ls[1], k, max_ls[2]))
				if temp_n < min_n or temp_n > max_n: continue
				# print("■■■■■■■■%d■■■■■■■■"%temp_n)
				result = [i,j,k]
				# print(temp_n, result, end = "")
				# コインの枚数
				temp_val = result[0] * a + result[1] * b + result[2] * c
				# print("temp_val = %d"%temp_val)
				# print("plus_val = %d"%(abs(temp_n - n)*d))
				coin_n = temp_val + (abs(temp_n - n)*d) + d
				# print("coin_n = %d"%coin_n)
				if coin_n < min_val: min_val = coin_n
	# 結果出力
	# print("result = ", end = "")
	print(min_val)