func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e5;   long long dmod(long long x, long long MOD) { return x % MOD; }   long long m;   long long fe(long long x, long long p) {     if (p == 0) return 1;     long long ret = fe(x, p / 2);     ret = dmod(ret * ret, m);     if (p & 1) ret = dmod(ret * x, m);     return ret;   }   int n;   long long li[N + 5];   set<long long> ada;   long long get_count(long long x) {     long long ret = 0;     for (int i = 1; i <= n; i++) {       long long cur = (li[i] + x) % m;       if (ada.find(cur) != ada.end()) ret++;     }     return ret;   }   bool proc() {     if (2 * n < m) return 0;     set<long long> tmp;     long long cur = 0;     for (int i = 1; i <= n; i++) {       while (cur != li[i]) tmp.insert(cur++);       cur++;     }     while (cur != m) tmp.insert(cur++);     int id = 0;     for (auto x : tmp) {       id++;       li[id] = x;     }     n = id;     return 1;   }   int main() {     scanf( %d%d , &m, &n);     for (int i = 1; i <= n; i++) scanf( %lld , &li[i]);     if (n == 1) {       printf( %lld 0 n , li[1]);       return 0;     } else if (m == 2 || n == m) {       printf( 0 1 n );       return 0;     } else if (n == m - 1) {       sort(li + 1, li + n + 1);       for (int i = 1; i <= n; i++) {         if (li[i] != (i - 1)) {           printf( %d 1 n , i);           return 0;         }       }       printf( 0 1 n );       return 0;     }     sort(li + 1, li + n + 1);     bool tukar = proc();     for (int i = 1; i <= n; i++) ada.insert(li[i]);     long long dif = li[2] - li[1];     long long cnt = get_count(dif);     long long inv = fe(n - cnt, m - 2);     dif = dmod(dif * inv, m);     deque<long long> dq;     dq.push_front(li[1]);     while (1) {       long long now = dq.front();       now = dmod(now - dif + m, m);       if (ada.find(now) != ada.end())         dq.push_front(now);       else         break;     }     while (1) {       long long now = dq.back();       now = dmod(now + dif, m);       if (ada.find(now) != ada.end())         dq.push_back(now);       else         break;     }     if (dq.size() != n) {       printf( -1 n );       return 0;     }     if (tukar) {       printf( %lld %lld n , dmod(dq.back() + dif, m), dif);     } else {       printf( %lld %lld n , dq.front(), dif);     }     return 0;   }   