import java.util.ArrayList;
import java.util.Scanner;
/*
4 10
2 4 6 8
4 10
2 9 1 0
*/
public class e {
static ArrayList<Integer>[] gcdLists;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt(),m=in.nextInt();
boolean[] forbid = new boolean[m];
for(int i=0;i<n;i++) {
forbid[in.nextInt()] = true;
}
gcdLists = new ArrayList[m+1];
for(int i=0;i<=m;i++)
gcdLists[i] = new ArrayList<>();
for(int i=0;i<m;i++) {
if(forbid[i]) continue;
int gcd = gcd(i, m);
gcdLists[gcd].add(i);
}
int[] ans = new int[m+1];
ans[m] = gcdLists[m].size();
for(int i=m-1;i>=1;i–) {
ans[i] = 0;
for(int j=i+i;j<=m;j+=i) {
if(m % j != 0) continue;
ans[i] = Math.max(ans[i], ans[j]);
}
ans[i] += gcdLists[i].size();
}
int gcd = 1;
ArrayList<Integer> list = new ArrayList<>();
while(gcd != m) {
for(int v : gcdLists[gcd]) {
list.add(v);
}
for(int j=gcd+gcd;j<=m;j+=gcd) {
if(m % j != 0) continue;
if(ans[j] == ans[gcd] – gcdLists[gcd].size()) {
gcd = j;
break;
}
}
}
for(int v : gcdLists[m])
list.add(v);
// System.out.println(list);
System.out.println(list.size());
if(list.size() >= 1) {
int last = list.get(0);
System.out.print(last);
for(int i=1;i<list.size();i++) {
int mult = solve(last,list.get(i),m);
System.out.print(‘ ‘);
System.out.print(mult);
last = list.get(i);
}
}
System.out.println();
}
static int solve(int a, int b, int m) {
int gcd = gcd(a,m);
a /= gcd;
b /= gcd;
m /= gcd;
int mi = ((modInv(a,m)%m)+m)%m;
// System.out.println(“modInv(” + a + “,” + m + “) = ” + mi);
return (int) ((mi*(long)b)%m);
}
static int modInv(int x, int mod) {
if(x == 1) return 1;
if(gcd(x, mod) != 1) return 0;
int r = mod % x;
return modInv(r, x % r, 0, 1, mod / x, x / r);
}
static int modInv(int a, int b, int y0, int y1, int q0, int q1) {
int y2 = y0 – y1*q0;
return b == 0 ? y2 : modInv(b, a % b, y1, y2, q1, a / b);
}
static int gcd(int a, int b) {
return b == 0 ? a : gcd(b,a%b);
}
}