// copy from 地下室.html
let f = (x, y) => (x == 1) ? 1 : f(y % x, y) * (y - parseInt(y / x)) % y;
let kyojin = "~dyl[fj!XHAu)(Hj~$HT}i";
// get prime
const MAXP = 1000000;
let prime = new Array(MAXP).fill(0);
for (let i = 2; i <= MAXP; ++i) {
if (!prime[i])
prime[++prime[0]] = i;
for (let j = 1; j <= prime[0] && prime[j] * i <= MAXP; ++j) {
prime[prime[j]*i] = 1;
if (i % prime[j] == 0)
break;
}
}
//try prime
for (let i = 1; i <= prime[0]; ++i) {
let eren = prime[i];
let flag = [];
Array.from(kyojin).forEach(x => {
if (x.charCodeAt(0) >= eren)
return;
let y = f(x.charCodeAt(0), eren);
if (y < 33 || y > 126)
return;
flag.push(y);
});
if (flag.length == kyojin.length) {
console.log(eren);
console.log(flag.map(x => String.fromCharCode(x)).join(""));
}
}