#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 D = A.back() - A[0]; if (N == 1) { cout << 1 << " " << 2 << "\n"; return 0; } long long limit = sqrt(D) + 5; vector Ws; // Case 1: small W for (long long W = 1; W <= limit; W++) Ws.push_back(W); // Case 2: approximately (D / (s-1)) for small s for (long long s = 2; s <= limit + 5; s++) { long long W = D / (s - 1); if (W >= 1) Ws.push_back(W); } // Case 1 segment (s=1) 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 << "\n" << bestCost << "\n"; }