Squares
시간 제한2초메모리 제한512 MB
n이 최대 10^18일 때, n을 서로 다른 제곱수의 합으로 나타내는 방법 중 가장 큰 밑의 최솟값 k(n)을 구하고, 1부터 n까지 overgrown 정수의 개수를 셉니다.
문제
양의 정수를 서로 다른 양의 정수의 제곱들의 합으로 나타내는 것을 분해라고 한다. 예를 들어 30은 분해가 두 가지 있다. 이다. 8은 분해가 없다.
을 의 모든 분해에 대해, 분해에 나타나는 제곱의 밑(제곱하기 전의 정수) 중 최댓값의 최솟값으로 정의한다. 의 분해가 없으면 이다. 예를 들어 , , , , 이다.
정수 에 대해, 이고 인 정수 가 존재하면 를 overgrown이라고 한다. 위 예시에서 378은 overgrown이다.
주어진 에 대해 과 1 이상 이하의 overgrown 정수의 개수를 구하라.
입력
첫 번째 줄에 정수 이 하나 주어진다. () 배점의 45%에 해당하는 테스트는 을 만족한다. 그중 배점의 30%에 해당하는 테스트는 을 만족하고, 더 작은 배점 20%의 테스트는 을 만족한다.
출력
공백으로 구분된 정수 두 개를 출력한다. 첫 번째는 이고, 두 번째는 1 이상 이하의 overgrown 정수의 개수이다. 이면 첫 번째 수 대신 마이너스 기호(-)를 출력한다.