import java.util.*;
import java.util.stream.*;
class FastFactoring
{
public static void main
(String[] args
) {
Map
<Long, Integer
> factors
= factorize
(num
);
//Printing out the map...
System.
out.
printf("%d = ", num
); if (factors.get(num) != null) {
} else {
Iterator<Long> factorKeys = factors.keySet().iterator();
for (int j = 0; j < factors.size(); j++) {
long factor = factorKeys.next();
int count = factors.get(factor);
if (count > 1) {
System.
out.
printf("%d^%d", factor, count
); } else {
System.
out.
printf("%d", factor
); }
if (j + 1 != factors.size()) {
}
}
}
}
public static Map
<Long, Integer
> factorize
(long num
) { Map
<Long, Integer
> factors
= new LinkedHashMap
<>(); long n = num;
for (long i = 2; i <= n / i; i++) {
int count = 0;
while (n % i == 0) {
count++;
n /= i;
}
if (count > 0) {
factors.put(i, count);
}
}
if (n > 1) {
factors.put(n, 1);
}
return factors;
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS4qOwoKY2xhc3MgRmFzdEZhY3RvcmluZwp7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykKCXsKCQlsb25nIG51bSA9IEludGVnZXIuTUFYX1ZBTFVFOwoJCU1hcDxMb25nLCBJbnRlZ2VyPiBmYWN0b3JzID0gZmFjdG9yaXplKG51bSk7CgkJCgkJLy9QcmludGluZyBvdXQgdGhlIG1hcC4uLgoJCVN5c3RlbS5vdXQucHJpbnRmKCIlZCA9ICIsIG51bSk7CiAgICAgICAgICAgIGlmIChmYWN0b3JzLmdldChudW0pICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlBSSU1FIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBJdGVyYXRvcjxMb25nPiBmYWN0b3JLZXlzID0gZmFjdG9ycy5rZXlTZXQoKS5pdGVyYXRvcigpOwogICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBmYWN0b3JzLnNpemUoKTsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgbG9uZyBmYWN0b3IgPSBmYWN0b3JLZXlzLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSBmYWN0b3JzLmdldChmYWN0b3IpOwogICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIiVkXiVkIiwgZmFjdG9yLCBjb3VudCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIiVkIiwgZmFjdG9yKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGogKyAxICE9IGZhY3RvcnMuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIsOXIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwoJfQoJCglwdWJsaWMgc3RhdGljIE1hcDxMb25nLCBJbnRlZ2VyPiBmYWN0b3JpemUobG9uZyBudW0pIHsKICAgICAgICBNYXA8TG9uZywgSW50ZWdlcj4gZmFjdG9ycyA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKICAgICAgICBsb25nIG4gPSBudW07CiAgICAgICAgZm9yIChsb25nIGkgPSAyOyBpIDw9IG4gLyBpOyBpKyspIHsKICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKICAgICAgICAgICAgd2hpbGUgKG4gJSBpID09IDApIHsKICAgICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgICAgICBuIC89IGk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkgewogICAgICAgICAgICAgICAgZmFjdG9ycy5wdXQoaSwgY291bnQpOwoKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobiA+IDEpIHsKICAgICAgICAgICAgZmFjdG9ycy5wdXQobiwgMSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWN0b3JzOwogICAgfQp9