만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

최대공약수

시간 제한5초메모리 제한1024 MB

요약
1부터 n까지의 정수 쌍 (x, y) 중 div를 쓴 유클리드 알고리즘이 끝나고 올바른 최대공약수를 내는 쌍을 사전순으로 세어, 각 질의의 p번째 쌍을 구합니다.
난이도

어려움10점 중 8점

유형
정수론, 수학, 시뮬레이션
정답자
아직 제출이 없습니다

문제

겐나디는 공부 중인 프로그래머다. 그는 두 양의 정수의 최대공약수를 구하는 유클리드 호제법을 배우고 있다.

겐나디는 정수 나눗셈 연산자(div)와 나머지 연산자(mod)를 자주 헷갈린다. 예를 들어 3737 div 10=310 = 3이고, 3737 mod 10=710 = 7이다.

겐나디가 작성한 유클리드 알고리즘은 다음과 같다:

  • 입력: 두 양의 정수 xx와 yy.
  • y>0y > 0인 동안 xx를 xx div yy로 바꾸고, 그다음 xx와 yy를 서로 바꾼다.
  • 출력: xx.

겐나디가 div 대신 mod를 썼다면 알고리즘은 xx와 yy의 최대공약수를 올바르게 찾았을 것이다. 그러나 이 버그에도 알고리즘이 올바르게 동작하는 경우가 있다.

겐나디는 1≤x,y≤n1 \le x, y \le n을 만족하고, 알고리즘이 종료되며 올바른 답을 출력하는 모든 입력 쌍 (x,y)(x, y)를 찾고자 한다. 이런 쌍을 사전순으로 나열한 것을 (x1,y1),(x2,y2),…,(xk,yk)(x_1, y_1), (x_2, y_2), \ldots, (x_k, y_k)라 한다.

또한 qq개의 질의가 주어진다. ii번째 질의는 양의 정수 pip_i이며, pip_i번째 쌍의 xpix_{p_i}와 ypiy_{p_i}를 출력하거나, pi>kp_i > k임을 보고한다.

입력

첫 줄에 정수 nn과 qq가 주어진다. nn은 입력 값의 상한이고, qq는 질의의 개수다 (1≤n,q≤2⋅1051 \le n, q \le 2 \cdot 10^5).

이후 qq개의 줄에 각각 정수 pip_i 하나가 주어진다 (1≤pi≤n21 \le p_i \le n^2).

출력

각 질의에 대해 두 정수를 출력한다. 알고리즘이 종료되고 올바른 답을 내는 쌍 중 사전순으로 pip_i번째인 쌍의 xpix_{p_i}와 ypiy_{p_i}를 출력한다. 그런 쌍이 pip_i개보다 적으면 -1 -1을 출력한다.

예제1

  1. 예제 1

    입력
    10 13
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    예상 출력
    2 2
    3 3
    4 2
    4 4
    5 5
    6 6
    7 7
    8 8
    9 3
    9 9
    10 4
    10 10
    -1 -1