use std::collections::{HashMap, HashSet}; use proconio::input; fn main() { input! { t: usize, } let mut sq: HashMap, usize> = HashMap::new(); for i in (0..=100000usize).rev() { let mut x = i * i; let mut d: HashMap = HashMap::new(); while x > 0 { let y = x % 10; *d.entry(y).or_insert(0) += 1; x /= 10; } let mut d_vec: Vec<(usize, usize)> = d.into_iter().collect(); d_vec.sort(); sq.insert(d_vec, i * i); } for _ in 0..t { input! { mut n: usize, } let mut d: HashMap = HashMap::new(); while n > 0 { let x = n % 10; *d.entry(x).or_insert(0) += 1; n /= 10; } let mut ans = 1e18 as usize; loop { let mut d_vec: Vec<(usize, usize)> = d.clone().into_iter().collect(); d_vec.sort(); if sq.contains_key(&d_vec) { ans = ans.min(*sq.get(&d_vec).unwrap()); } if d.contains_key(&0) { if let Some(count) = d.get_mut(&0) { if *count > 0 { *count -= 1; } else { d.remove(&0); } } } else { break; } } if ans == 1e18 as usize { println!("-1"); } else { println!("{}", ans); } } }