fn main() {

    let mut s: String = read();
    s.retain(|c| c != ' ');
    let n: i32 = s.parse().unwrap();

    let mut sqrt_vec = Vec::new();
    for i in 1..1001 {
        sqrt_vec.push(i * i);
    }

    let mut flg: bool = true;

    for i in sqrt_vec {
        if i == n {
            println!("Yes");
            flg = false;
        }
    }

    if flg == true {
        println!("No");
    }
}

fn read<T: std::str::FromStr>() -> T {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().parse().ok().unwrap()
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    read::<String>()
        .split_whitespace()
        .map(|e| e.parse().ok().unwrap())
        .collect()
}

fn read_vec2<T: std::str::FromStr>(n: u32) -> Vec<Vec<T>> {
    (0..n).map(|_| read_vec()).collect()
}
