func_code_string: #include <bits/stdc++.h>   using namespace std;   const int INF = 0x3f3f3f3f;   const long long INFF = 0x3f3f3f3f3f3f3f3fll;   const long long M = 1e9 + 7;   const long long maxn = 2e5 + 7;   const double eps = 0.00000001;   long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }   template <typename T>   inline T abs(T a) {     return a > 0 ? a : -a;   }   void exgcd(long long a, long long b, long long &d, long long &x, long long &y) {     if (!b) {       d = a;       x = 1;       y = 0;     } else {       exgcd(b, a % b, d, y, x);       y -= a / b * x;     }   }   int n, m;   int i, j;   bool used[maxn];   vector<int> v[maxn];   int num[maxn], fa[maxn], mx;   int pp = 1;   void print(int mx) {     if (fa[mx]) print(fa[mx]);     long long a, b, t;     for (i = 0; i < v[mx].size(); i++) {       exgcd(pp, m, t, a, b);       printf( %I64d  , (v[mx][i] / t * a % m + m) % m);       pp = v[mx][i];     }   }   int main() {     scanf( %d%d , &n, &m);     for (i = 0; i < n; i++) scanf( %d , &j), used[j] = 1;     for (i = 1; i < m; i++)       if (!used[i]) v[gcd(i, m)].push_back(i);     for (i = 1; i < m; i++) {       if ((num[i] += v[i].size()) > num[mx]) mx = i;       for (j = i << 1; j < m; j += i)         if (num[j] < num[i]) num[j] = num[i], fa[j] = i;     }     printf( %d n , num[mx] + !used[0]);     print(mx);     if (!used[0])       puts( 0 );     else       puts(  );   }   