#include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; vector A(N); for (auto &x : A) cin >> x; long long mn = A[0], mx = A.back(); long long D = mx - mn; if (N == 1) { cout << 1 << " " << 2 << "\n"; return 0; } long long limit = sqrt(D) + 5; vector Ws; // 1) Small widths for (long long w = 1; w <= limit; w++) Ws.push_back(w); // 2) Breakpoints for floor(A/W) for (long long k = 1; k <= limit; k++) { long long L = D / (k + 1) + 1; long long R = D / k; if (L <= R) { if (L > limit) Ws.push_back(L); if (R > limit) Ws.push_back(R); } } // 3) MUST ADD W = D + 1 (one segment case) Ws.push_back(D + 1); sort(Ws.begin(), Ws.end()); Ws.erase(unique(Ws.begin(), Ws.end()), Ws.end()); long long bestW = -1, bestCost = LLONG_MAX; for (long long W : Ws) { long long segments = 1; long long cur = A[0] / W; for (int i = 1; i < N; i++) { long long s = A[i] / W; if (s != cur) { segments++; cur = s; } } long long cost = segments * (W + 1); if (cost < bestCost || (cost == bestCost && W < bestW)) { bestCost = cost; bestW = W; } } cout << bestW << " " << bestCost << "\n"; return 0; }