#include using namespace std; using ll = long long; using vl = vector; using vvl = vector; using vvvl = vector; using xy = pair; using vxy = vector; using vvxy = vector; using bs8 = bitset<8>; using bs16 = bitset<16>; using bs32 = bitset<32>; using bs64 = bitset<64>; using vbs8 = vector; using vbs16 = vector; using vbs32 = vector; using vbs64 = vector; using vs = vector; using vvs = vector; using ull = unsigned long long; using vul = vector; using vd = vector; using vvd = vector; using coord = pair; using vcoord = vector; #define rep(var, n) for (ll var = 0; var < (n); var++) #define cnt(var, n, m) for (ll var = (n); var <= (m); var++) #define rcnt(var, n, m) for (ll var = (n); var >= (m); var--) #define each(ite, C) for (auto ite = (C).begin(); ite != (C).end(); ite++) #define reach(ite, C) for (auto ite = (C).rbegin(); ite != (C).rend(); ite++) #define yn(b) cout << (((b) > 0) ? "Yes" : "No") << endl; ///////////////////////////////////////////////// namespace zz_time { /// @brief プログラム実行時のタイムポイント std::chrono::_V2::system_clock::time_point START_TIME = std::chrono::system_clock::now(); /// @brief プログラム実行から経過時間をミリ秒で取得 /// @param st 経過開始時刻(基本引数指定する必要なし) /// @return 経過時間ミリ秒 ll currentTime(std::chrono::_V2::system_clock::time_point st = START_TIME) { std::chrono::_V2::system_clock::time_point now = std::chrono::system_clock::now(); return (ll)(std::chrono::duration_cast(now - st) .count()); }; /// @brief 実行時間が超過していないかの判定 /// @param mSec 実行時間制約ミリ秒 /// @return 実行時間制約以下であればtrue,その他はfalse bool punctualityTime(const ll& mSec) { return (currentTime() < mSec); } /// @brief 実行時間が超過しているかの判定 /// @param mSec 実行時間制約ミリ秒 /// @return 実行時間制約超過していればtrue,その他はfalse bool spendTime(const ll& mSec) { return (currentTime() >= mSec); } }; // namespace zz_time using namespace zz_time; namespace zz_random { random_device seed_gen; default_random_engine RANDOM_ENGINE(seed_gen()); /// @brief 整数閉区間[L,R]一様ランダム器生成 /// @param L 下限値 (default 0) /// @param R 上限値 (default 1) /// @return ランダム生成器, RAMDOM_ENGINEを引数としてランダム生成 uniform_int_distribution<> createIntCloseSegRandom(const ll& L = 0, const ll& R = 1) { return uniform_int_distribution<>(L, R); }; /// @brief 実数閉区間[L,R]一様ランダム器生成 /// @param L 下限値 (default 0.0) /// @param R 上限値 (default 1.0) /// @return ランダム生成器, RAMDOM_ENGINEを引数としてランダム生成 uniform_real_distribution<> createRealCloseSegRandom(const double& L = 0.0, const double& R = 1.0) { return uniform_real_distribution<>(L, R); }; /// @brief 正規表現ランダム器生成 /// @param average 平均値 /// @param s 標準偏差 /// @return ランダム生成器, RAMDOM_ENGINEを引数としてランダム生成 normal_distribution<> createNormalRandom(const double& average = 0.0, const double& s = 1.0) { return normal_distribution<>(average, s); }; }; // namespace zz_random using namespace zz_random; namespace zz_mod { class pp { public: ll val; ll mod; void recalc() { val %= mod; if (val < 0) val += mod; }; /// @brief modint (+-*/ != exp ~ inv recalc ) /// @param x value /// @param y mod (default= 998244353) pp(const ll& x = 0, const ll& y = 998244353) { val = x; mod = y; recalc(); }; friend pp operator+(const pp& x, const pp& y) { return pp(x.val + y.val, x.mod); }; friend pp operator+(const pp&& x, const pp& y) { return pp(x.val + y.val, x.mod); }; friend pp operator+(const pp& x, const pp&& y) { return pp(x.val + y.val, x.mod); }; friend pp operator+(const pp&& x, const pp&& y) { return pp(x.val + y.val, x.mod); }; template friend pp operator+(const pp& x, const T& y) { return pp(x.val + y, x.mod); }; template friend pp operator+(const pp&& x, const T& y) { return pp(x.val + y, x.mod); }; template friend pp operator+(const pp& x, const T&& y) { return pp(x.val + y, x.mod); }; template friend pp operator+(const pp&& x, const T&& y) { return pp(x.val + y, x.mod); }; friend pp operator-(const pp& x) { return pp(-x.val, x.mod); }; friend pp operator-(const pp&& x) { return pp(-x.val, x.mod); }; friend pp operator-(const pp& x, const pp& y) { return pp(x.val - y.val, x.mod); }; friend pp operator-(const pp&& x, const pp& y) { return pp(x.val - y.val, x.mod); }; friend pp operator-(const pp& x, const pp&& y) { return pp(x.val - y.val, x.mod); }; friend pp operator-(const pp&& x, const pp&& y) { return pp(x.val - y.val, x.mod); }; template friend pp operator-(const pp& x, const T& y) { return pp(x.val - y, x.mod); }; template friend pp operator-(const pp&& x, const T& y) { return pp(x.val - y, x.mod); }; template friend pp operator-(const pp& x, const T&& y) { return pp(x.val - y, x.mod); }; template friend pp operator-(const pp&& x, const T&& y) { return pp(x.val - y, x.mod); }; friend pp operator*(const pp& x, const pp& y) { return pp(x.val * y.val, x.mod); }; friend pp operator*(const pp&& x, const pp& y) { return pp(x.val * y.val, x.mod); }; friend pp operator*(const pp& x, const pp&& y) { return pp(x.val * y.val, x.mod); }; friend pp operator*(const pp&& x, const pp&& y) { return pp(x.val * y.val, x.mod); }; template friend pp operator*(const pp& x, const T& y) { return pp(x.val * y, x.mod); }; template friend pp operator*(const pp&& x, const T& y) { return pp(x.val * y, x.mod); }; template friend pp operator*(const pp& x, const T&& y) { return pp(x.val * y, x.mod); }; template friend pp operator*(const pp&& x, const T&& y) { return pp(x.val * y, x.mod); }; friend pp operator~(const pp& x) { return x.exp(-1); } friend pp operator~(const pp&& x) { return x.exp(-1); } friend pp operator/(const pp& x, const pp& y) { return x * (~y); }; friend pp operator/(const pp&& x, const pp& y) { return x * (~y); }; friend pp operator/(const pp& x, const pp&& y) { return x * (~y); }; friend pp operator/(const pp&& x, const pp&& y) { return x * (~y); }; template friend pp operator/(const pp& x, const T& y) { return x * pp(y, x.mod).inv(); }; template friend pp operator/(const pp&& x, const T& y) { return x * pp(y, x.mod).inv(); }; template friend pp operator/(const pp& x, const T&& y) { return x * pp(y, x.mod).inv(); }; template friend pp operator/(const pp&& x, const T&& y) { return x * pp(y, x.mod).inv(); }; friend pp& operator+=(pp& x, const pp& y) { x.val += y.val; x.recalc(); return x; }; friend pp& operator+=(pp& x, const pp&& y) { x.val += y.val; x.recalc(); return x; }; template friend pp& operator+=(pp& x, const T& y) { x.val += y; x.recalc(); return x; }; template friend pp& operator+=(pp& x, const T&& y) { x.val += y; x.recalc(); return x; }; friend pp& operator-=(pp& x, const pp& y) { x.val -= y.val; x.recalc(); return x; }; friend pp& operator-=(pp& x, const pp&& y) { x.val -= y.val; x.recalc(); return x; }; template friend pp& operator-=(pp& x, const T& y) { x.val -= y; x.recalc(); return x; }; template friend pp& operator-=(pp& x, const T&& y) { x.val -= y; x.recalc(); return x; }; friend pp& operator*=(pp& x, const pp& y) { x.val *= y.val; x.recalc(); return x; }; friend pp& operator*=(pp& x, const pp&& y) { x.val *= y.val; x.recalc(); return x; }; template friend pp& operator*=(pp& x, const T& y) { x.val *= y; x.recalc(); return x; }; template friend pp& operator*=(pp& x, const T&& y) { x.val *= y; x.recalc(); return x; }; friend pp& operator/=(pp& x, const pp& y) { x *= pp(y.val, x.mod).inv(); x.recalc(); return x; }; friend pp& operator/=(pp& x, const pp&& y) { x *= pp(y.val, x.mod).inv(); x.recalc(); return x; }; template friend pp& operator/=(pp& x, const T& y) { x *= pp(y, x.mod).inv(); x.recalc(); return x; }; template friend pp& operator/=(pp& x, const T&& y) { x *= pp(y, x.mod).inv(); x.recalc(); return x; }; pp exp(ll x) const { if (x == 0) { return pp(1, this->mod); } pp y = *this; if (x > 0) { vl Vec; while (x > 0) { Vec.push_back(x & 1); x >>= 1; } pp ans(1, this->mod); each(ite, Vec) { if (*ite) ans = ans * y; y = y * y; } return ans; } return y.exp(y.mod - 2).exp(-x); }; pp inv() const { return ~(*this); return pp(this->val, this->mod).exp(-1); } }; class factorial { public: const ll size; vector vec; /// @brief mod! (operator[] comb) /// @param x max! [0,x] (default 1000000) /// @param y mod (default 998244353) factorial(const ll&& x = 1000000, const ll&& y = 998244353) : size(x + 1) { vec = vector(x + 1, pp(1, y)); cnt(i, 2, x) vec[i] *= (vec[i - 1] * pp(i, y)); }; /// @brief mod factorial /// @return x! mod pp operator[](const ll& x) const { return vec[x]; }; /// @brief mod factorial /// @return x! mod pp operator[](const ll&& x) const { return vec[x]; }; /// @brief mod combination /// @param n /// @param m /// @return nCm pp comb(const ll n, const ll m) const { return (vec[n] / (vec[m] * vec[n - m])); }; }; } // namespace zz_mod using namespace zz_mod; namespace zz_print { namespace elm { template void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const Arg&& arg) { cout << "[" << arg << "| " << Indent << " " << Space << " ]" << endl; }; void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const ll& elm) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << elm << string(Space, ' '); }; void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const int& elm) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << elm << string(Space, ' '); }; void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const ull& elm) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << elm << string(Space, ' '); }; void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const unsigned int& elm) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << elm << string(Space, ' '); }; template void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const pair& pr) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << "< " << pr.first << " , " << pr.second << " >" << string(Space, ' '); }; void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const pp& pr) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << "{ " << pr.val << " | " << pr.mod << " }" << string(Space, ' '); }; void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const double& elm) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << elm << string(Space, ' '); }; void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const float& elm) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << elm << string(Space, ' '); }; void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const char& elm) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << elm << string(Space, ' '); }; void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const string& elm) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << elm << string(Space, ' '); }; void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const bs8& elm) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << elm << string(Space, ' '); }; void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const bs16& elm) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << elm << string(Space, ' '); }; void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const bs32& elm) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << elm << string(Space, ' '); }; void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const bs64& elm) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << elm << string(Space, ' '); }; template void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const vector& Vec) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << "[" << string(Space, ' '); if (FlatHier == 1) cout << endl << string(Indent + (1 + Space), ' '); each(ite, Vec) ZOUT(max(0, FlatHier - 1), Indent + (FlatHier > 0 ? 3 : 0), Space, *ite); if (FlatHier >= 1) cout << endl << string(Indent, ' '); cout << "]" << string(Space, ' '); }; template void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const list& Lst) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << "[" << string(Space, ' '); if (FlatHier == 1) cout << endl << string(Indent + (1 + Space), ' '); each(ite, Lst) ZOUT(max(0, FlatHier - 1), Indent + (FlatHier > 0 ? 3 : 0), Space, *ite); if (FlatHier >= 1) cout << endl << string(Indent, ' '); cout << "]" << string(Space, ' '); }; template void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const set& SET) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << "[" << string(Space, ' '); if (FlatHier == 1) cout << endl << string(Indent + (1 + Space), ' '); each(ite, SET) ZOUT(max(0, FlatHier - 1), Indent + (FlatHier > 0 ? 3 : 0), Space, *ite); if (FlatHier >= 1) cout << endl << string(Indent, ' '); cout << "]" << string(Space, ' '); }; template void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const multiset& SET) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << "[" << string(Space, ' '); if (FlatHier == 1) cout << endl << string(Indent + (1 + Space), ' '); each(ite, SET) ZOUT(max(0, FlatHier - 1), Indent + (FlatHier > 0 ? 3 : 0), Space, *ite); if (FlatHier >= 1) cout << endl << string(Indent, ' '); cout << "]" << string(Space, ' '); }; template void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const unordered_set& SET) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << "[" << string(Space, ' '); if (FlatHier == 1) cout << endl << string(Indent + (1 + Space), ' '); each(ite, SET) ZOUT(max(0, FlatHier - 1), Indent + (FlatHier > 0 ? 3 : 0), Space, *ite); if (FlatHier >= 1) cout << endl << string(Indent, ' '); cout << "]" << string(Space, ' '); }; template void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const unordered_multiset& SET) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << "[" << string(Space, ' '); if (FlatHier == 1) cout << endl << string(Indent + (1 + Space), ' '); each(ite, SET) ZOUT(max(0, FlatHier - 1), Indent + (FlatHier > 0 ? 3 : 0), Space, *ite); if (FlatHier >= 1) cout << endl << string(Indent, ' '); cout << "]" << string(Space, ' '); }; template void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const map& MAP) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << "[" << string(Space, ' '); if (FlatHier == 1) cout << endl << string(Indent + (1 + Space), ' '); each(ite, MAP) ZOUT(max(0, FlatHier - 1), Indent + (FlatHier > 0 ? 3 : 0), Space, *ite); if (FlatHier >= 1) cout << endl << string(Indent, ' '); cout << "]" << string(Space, ' '); }; template void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const multimap& MAP) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << "[" << string(Space, ' '); if (FlatHier == 1) cout << endl << string(Indent + (1 + Space), ' '); each(ite, MAP) ZOUT(max(0, FlatHier - 1), Indent + (FlatHier > 0 ? 3 : 0), Space, *ite); if (FlatHier >= 1) cout << endl << string(Indent, ' '); cout << "]" << string(Space, ' '); }; template void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const unordered_map& MAP) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << "[" << string(Space, ' '); if (FlatHier == 1) cout << endl << string(Indent + (1 + Space), ' '); each(ite, MAP) ZOUT(max(0, FlatHier - 1), Indent + (FlatHier > 0 ? 3 : 0), Space, *ite); if (FlatHier >= 1) cout << endl << string(Indent, ' '); cout << "]" << string(Space, ' '); }; template void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const unordered_multimap& MAP) { if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << "[" << string(Space, ' '); if (FlatHier == 1) cout << endl << string(Indent + (1 + Space), ' '); each(ite, MAP) ZOUT(max(0, FlatHier - 1), Indent + (FlatHier > 0 ? 3 : 0), Space, *ite); if (FlatHier >= 1) cout << endl << string(Indent, ' '); cout << "]" << string(Space, ' '); }; template void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const stack& Sta) { stack Datas = Sta; if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << "(" << string(Space, ' '); if (FlatHier == 1) cout << endl << string(Indent + (1 + Space), ' '); while (!Datas.empty()) { Elm Data = Datas.top(); Datas.pop(); ZOUT(max(0, FlatHier - 1), Indent + (FlatHier > 0 ? 3 : 0), Space, Data); } if (FlatHier >= 1) cout << endl << string(Indent, ' '); cout << "]" << string(Space, ' '); }; template void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const queue& Que) { queue Datas = Que; if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << "(" << string(Space, ' '); if (FlatHier == 1) cout << endl << string(Indent + (1 + Space), ' '); while (!Datas.empty()) { Elm Data = Datas.front(); Datas.pop(); ZOUT(max(0, FlatHier - 1), Indent + (FlatHier > 0 ? 3 : 0), Space, Data); } if (FlatHier >= 1) cout << endl << string(Indent, ' '); cout << "]" << string(Space, ' '); }; template void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const priority_queue& Que) { priority_queue Datas = Que; if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << "(" << string(Space, ' '); if (FlatHier == 1) cout << endl << string(Indent + (1 + Space), ' '); while (!Datas.empty()) { Elm Data = Datas.top(); Datas.pop(); ZOUT(max(0, FlatHier - 1), Indent + (FlatHier > 0 ? 3 : 0), Space, Data); } if (FlatHier >= 1) cout << endl << string(Indent, ' '); cout << "]" << string(Space, ' '); }; template void ZOUT(const ll& FlatHier, const ll& Indent, const ll& Space, const deque& Que) { deque Datas = Que; if (FlatHier > 0 && Indent > 0) cout << endl << string(Indent, ' '); cout << "(" << string(Space, ' '); if (FlatHier == 1) cout << endl << string(Indent + (1 + Space), ' '); while (!Datas.empty()) { Elm Data = Datas.front(); Datas.pop_front(); ZOUT(max(0, FlatHier - 1), Indent + (FlatHier > 0 ? 3 : 0), Space, Data); } if (FlatHier >= 1) cout << endl << string(Indent, ' '); cout << "]" << string(Space, ' '); }; } // namespace elm namespace branch { void ZOUT_branch(const ll& FlatHier, const ll& Indent, const ll& Space) {}; template void ZOUT_branch(const ll& FlatHier, const ll& Indent, const ll& Space, HeadArg&& headArg, Args&&... args) { zz_print::elm::ZOUT(FlatHier, Indent, Space, headArg); ZOUT_branch(FlatHier, Indent, Space, std::forward(args)...); }; template void ZOUT_branch(const ll& FlatHier, const ll& Indent, const ll& Space, HeadArg& headArg, Args&... args) { zz_print::elm::ZOUT(FlatHier, Indent, Space, headArg); ZOUT_branch(FlatHier, Indent, Space, std::forward(args)...); }; } // namespace branch /// @brief プリント関数 /// @tparam FlatHier 改行による階層表示数 (default 0 改行なし) /// @tparam Space 表示スペース間隔 (default 2) /// @tparam InitIndent インデント間隔 (default 0) /// @tparam ...Args 可変引数型 (指定する必要なし) /// @param ...args 可変引数 template void zout(Args&&... args) { cout << flush; branch::ZOUT_branch(FlatHier, InitIndent, Space, std::forward(args)...); cout << endl; }; }; // namespace zz_print using namespace zz_print; ///////////////////////////////////////////////// void solve(string& S) { sort(S.begin(), S.end()); // cout << S << endl; ll M = S.size(); do { ll X = 0; rep(i, M) X = (X * 10) + (S[i] - '0'); ll Y = sqrt(X); if (((Y * Y) == X) || (((Y + 1) * (Y + 1)) == X)) { cout << X << endl; return; } } while (next_permutation(S.begin(), S.end())); cout << -1 << endl; } ///////////////////////////////////////////////// int main() { ll T; cin >> T; vs N(T); rep(i, T) cin >> N[i]; rep(i, T) solve(N[i]); return 0; }