#include #include #include #include #include #include #include #include #include namespace ranges = std::ranges; namespace views = std::views; // #include "Src/Number/IntegerDivision.hpp" // #include "Src/Utility/BinarySearch.hpp" // #include "Src/Sequence/CompressedSequence.hpp" // #include "Src/Sequence/RunLengthEncoding.hpp" // #include "Src/Algebra/Group/AdditiveGroup.hpp" // #include "Src/DataStructure/FenwickTree/FenwickTree.hpp" // #include "Src/DataStructure/SegmentTree/SegmentTree.hpp" // #include "Src/DataStructure/DisjointSetUnion/DisjointSetUnion.hpp" // using namespace zawa; // #include "atcoder/modint" // using mint = atcoder::modint998244353; #include #include using item = std::array; item f(int n) { item res; res.fill(0); while (n) { res[n % 10]++; n /= 10; } return res; } int main() { std::cin.tie(nullptr); std::cout.tie(nullptr); std::ios::sync_with_stdio(false); std::map map; for (int i = 1 ; i * i <= 1000000000 ; i++) { const item v = f(i * i); auto it = map.find(v); if (it == map.end()) map[v] = i * i; else it->second = std::min(it->second, i * i); } int T; std::cin >> T; while (T--) { int N; std::cin >> N; item v = f(N); const int INF = (int)2e9; int ans = INF; while (v[0] >= 0) { const auto it = map.find(v); if (it != map.end()) ans = std::min(ans, it->second); v[0]--; } std::cout << (ans == INF ? -1 : ans) << '\n'; } }