//刚开始int WA了 改为LL就AC了 在队列里忘了加q.pop()导致死循环没输出,,然后 在进位那儿的i写成了tmp.pos*10。。。。导致结果一直为同一个数 ..;....
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
typedef long long LL;
LL Mod;
LL n;
struct Num{
LL pos;
LL num;
bool operator < (const Num &a) const{
return num > a.num;
}
};
void CalMod(LL n)
{
Mod = 1;
while(n){
Mod *= 10;
n /= 10;
}
}
int bfs()
{
priority_queue<Num> q;
Num tmp;
tmp.num = 0;
tmp.pos = 1;
q.push(tmp);
while(!q.empty()){
Num tmp1 = q.top() ;
q.pop();
//判断是否符合条件
if(tmp1.num*tmp1.num%Mod == n){
cout << tmp1.num << endl;
return 0;
}
//入队列
for(LL i=0; i<10; i++){
tmp.num = tmp1.num+i*tmp1.pos;
//判断
tmp.pos = tmp1.pos*10;
//判断是否入队
if(tmp.num*tmp.num%tmp.pos == n%tmp.pos)
q.push(tmp);
}
}
return 1;
}
int main()
{
LL T;
cin >> T;
while(T--){
cin >> n;
CalMod(n);
if(bfs())
{
cout << "None" << endl;
}
}
return 0;
}