小苯的数字折叠
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小苯发现了一种特殊的数字运算,称为“数字折叠”。对于一个正整数 x,定义其折叠操作为:
\hspace{23pt}\bullet\,x 的各位数字倒序排列并除去前导 0 得到 x'
\hspace{23pt}\bullet\,计算 x + x' 得到新数字;
\hspace{23pt}\bullet\,重复这个过程直到得到一个回文数
\hspace{15pt}例如,对于 x = 68,有:
\hspace{23pt}\bullet\,第一次折叠:68 + 86 = 154
\hspace{23pt}\bullet\,第二次折叠:154 + 451 = 605
\hspace{23pt}\bullet\,第三次折叠:605 + 506 = 1111(是一个回文数)。

\hspace{15pt}现在给定一个正整数 n 和最大操作次数 k,请判断:n 在最多 k 次折叠操作内(当然,也可以不操作)是否能变成回文数。如果能,输出最少操作次数得到的回文数和最少的操作次数;如果不能,输出第 k 次操作后的结果和 -1

【名词解释】
\hspace{15pt}回文数:一个数被称作回文数,当且仅当这个数从左往右读和从右往左读是相同的。

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 10^4\right) 代表数据组数,每组测试数据描述如下:
\hspace{15pt}在一行上输入两个整数 n, k\left(1\leqq n\leqq 10^6, 1\leqq k\leqq 20\right)

输出描述:

\hspace{15pt}对于每一组测试数据,新起一行:
\hspace{23pt}\bullet\,如果在 k 次操作内得到回文数,在一行上输出两个整数,表示最少操作次数得到的该回文数、最少操作次数;
\hspace{23pt}\bullet\,否则,在一行上输出两个整数,表示第 k 次操作后的结果、固定的整数 -1
示例1

输入

复制
3
68 3
68 2
196 10

输出

复制
1111 3
605 -1
18211171 -1

说明

\hspace{15pt}对于第一组测试数据,已经在题面中加以解释。
\hspace{15pt}对于第二组测试数据,68154605(2次未得到回文数)。
\hspace{15pt}对于第三组测试数据,196 是著名的 Lychrel 数,我们可以证明,在 10 次操作内无法得到回文数。