二十四点
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

你手里有无数个整数k(保证1\le k\le 9)。还有无数个左右小括号()和加乘号+*。现在希望你拼出来一个合法的表达式,使得式子的值为n

允许你连续多次使用k,比如k为1时,可以1+1+1+1+1+1+1+1+1+1+1来拼出11,也可以用(1+1)*(1+1)*(1+1)+1+1+1来拼出11,但是使用最少的k的方案是使用11来拼出11

现在希望你找到所有能拼出来值为n的表达式中,使用k最少的个数。如果不能拼出来,请输出-1

输入描述:

第一行一个正整数t表示数据组数(1\le t\le 10^3)。

接下来t行,每行两个正整数分别表示kn1\le k \le 91\leq n \leq 5*10^3),

输出描述:

输出t行,每行一个整数表示本次询问的答案:如果能拼出来,请输出最少k的个数;如果不能拼出来,请输出-1
示例1

输入

复制
6
1 1
1 2
1 3
1 4
1 5
1 5000

输出

复制
1
2
3
4
5
14
示例2

输入

复制
4
3 2
3 3
3 10
3 66

输出

复制
-1
1
-1
4