가젯 공장

시간 제한3초메모리 제한256 MB

요약
정렬된 m개의 공장이 n종류 부품 중 하나씩 생산할 때, 각 부품에 대한 최근접 공장까지 거리의 제곱합을 최소화하는 모든 좌표 t를 정확한 분수 형태로 구하는 문제입니다.
난이도

어려움10점 중 8점

유형
수학, 이분 탐색, 누적 합, 구현
정답자
아직 제출이 없습니다

문제

스미스 씨는 대단히 부유한 가젯 애호가입니다. 원하는 가젯이 아직 생산되지 않았다는 이유만으로 살 수 없다는 사실을 깨달은 그는, 직접 가젯 공장을 세우기로 결심했습니다.

이 공장은 실리콘 로드라 불리는 거리에 세워집니다. 이 거리에는 가젯을 만드는 데 필요한 첨단 부품을 생산하는 공장들이 늘어서 있습니다. 실리콘 로드는 완전히 직선이고 공장들은 도로에 바짝 붙어 있으므로, 도로를 수직선으로, 각 공장을 그 위의 한 점으로 볼 수 있습니다. 이러한 부품 생산 공장을 공장이라고 부릅니다.

가젯 하나를 만들려면 서로 다른 nn가지 부품이 필요하고, 도로변에는 이 부품들을 생산하는 공장이 mm개 있으며, 각 공장은 정확히 한 종류의 부품을 생산합니다. 가젯 공장을 좌표 tt에 세운다고 할 때, 그 비용은 필요한 nn가지 부품 각각에 대해 그 부품을 생산하는 가장 가까운 공장까지의 거리의 제곱을 모두 더한 값입니다.

이 비용이 최소가 되는 모든 좌표 tt를 구하세요.

입력

첫째 줄에 두 정수 nn과 mm이 주어집니다 (1≤n≤100001 \le n \le 10000; n≤m≤100000n \le m \le 100000).

이어지는 mm개의 줄에는 각각 두 정수 xix_i와 pip_i가 주어집니다. xix_i는 ii번째 공장의 좌표이고, pip_i는 그 공장이 생산하는 부품의 번호입니다 (∣xi∣≤100000|x_i| \le 100000; xi≤xi+1x_i \le x_{i+1}; 1≤pi≤n1 \le p_i \le n).

필요한 각 부품은 적어도 하나의 공장에서 생산됩니다.

출력

f(t)f(t)를 tt에서 각 부품을 생산하는 가장 가까운 공장까지의 거리의 제곱을 nn가지 부품에 대해 모두 더한 값이라고 하겠습니다. ff가 최솟값을 갖는 모든 점의 좌표는 분모가 nn을 나누는 유리수입니다.

첫째 줄에 f(t)f(t)가 최소가 되는 점의 개수 kk를 출력합니다. 이어서 그 kk개의 점을 오름차순으로 한 줄에 하나씩 출력하되, 각 점을 기약분수 p/q (q>0q > 0) 형태로 정확히 출력하고, q=1q = 1인 경우에는 정수 p로 출력합니다.

예제2

  1. 예제 1

    입력
    3 5
    -1 3
    0 1
    2 3
    4 2
    5 2
    
    예상 출력
    1
    2
    
  2. 예제 2

    입력
    2 5
    1 1
    2 2
    3 1
    4 2
    5 1
    
    예상 출력
    4
    3/2
    5/2
    7/2
    9/2