To become the king of Codeforces, Kuroni has to solve the following problem.

He is given n numbers a_1, a_2, ..., a_n. Help Kuroni to calculate ∏_{1≤ i<j≤ n} |a_i - a_j|. As result can be very big, output it modulo m.

If you are not familiar with short notation, ∏_{1≤ i<j≤ n} |a_i - a_j| is equal to |a_1 - a_2|⋅|a_1 - a_3|⋅ ... ⋅|a_1 - a_n|⋅|a_2 - a_3|⋅|a_2 - a_4|⋅ ... ⋅|a_2 - a_n| ⋅ ... ⋅ |a_{n-1} - a_n|. In other words, this is the product of |a_i - a_j| for all 1≤ i < j ≤ n.

Input

The first line contains two integers n, m (2≤ n ≤ 2⋅ 10^5, 1≤ m ≤ 1000) — number of numbers and modulo.

The second line contains n integers a_1, a_2, ..., a_n (0 ≤ a_i ≤ 10^9).

Output

Output the single number — ∏_{1≤ i<j≤ n} |a_i - a_j| mod m.

Examples

Input


2 10
8 5


Output


3

Input


3 12
1 4 5


Output


0

Input


3 7
1 4 9


Output


1

Note

In the first sample, |8 - 5| = 3 ≡ 3 mod 10.

In the second sample, |1 - 4|⋅|1 - 5|⋅|4 - 5| = 3⋅ 4 ⋅ 1 = 12 ≡ 0 mod 12.

In the third sample, |1 - 4|⋅|1 - 9|⋅|4 - 9| = 3 ⋅ 8 ⋅ 5 = 120 ≡ 1 mod 7.
import java.util.*;
import java.io.*;
import java.util.Map.Entry;


public class Main{

	static int inf=Integer.MAX_VALUE;
	static long mod=(int)1e9+7;
	static long [] fact;
	
	static void solve(Reader in, Writer out){
		
		  int n=in.ni(), m=in.ni();
		  int a[]=in.ra(n);
		  if(m<n) out.println(0);
		  else{
		  	long ans=1;
		  	for(int i=0; i<n; ++i){
		  		for(int j=i+1; j<n; ++j){
		  			ans*=Math.abs(a[j]-a[i]);
		  			ans%=m;
		  		}
		  	}

		  	out.println(ans);
		  }                              	

	}
	public static void main(String[] args) throws IOException {
		Writer out=new Writer(System.out);
		Reader in=new Reader(System.in);	
		// mod=998244353;
		// mod=Long.MAX_VALUE;
		int ts=1;
		// ts=in.ni();
		while(ts-->0) {
			solve(in, out);
		}
		out.close();
	}
	static long ppow(long n, long m){
		if(m==0) return 1;
		long tmp=ppow(n,m/2);
		tmp=tmp*tmp%mod;
		return m%2==0 ? tmp : tmp*n %mod;
	}
	static long gcd(long n, long m){ return m==0 ? n : gcd(m, n%m); }
	static long lcm(long n, long m){ return n/gcd(n,m)*m; }
	static long nCr(int n, int r){ return fact[n]*ppow(fact[n-r], mod-2) % mod * ppow(fact[r],mod-2) % mod; }
	static void factInit(int n){ fact=new long[n]; fact[0]=1; for(int i=1; i<n; ++i) fact[i]=fact[i-1]*i % mod; }
	static int smaller(long [] a, long k){
		if(a[0]>=k) return 0; int t=0;
		for(int j=a.length; j>=1; j/=2){ while(t+j<a.length && a[t+j]<k) t+=j; } return t+1;
	}
	static void reverse(int a[]){
		ArrayList<Integer> al=new ArrayList<>();
		for(int i: a) al.add(i); Collections.reverse(al);
		for(int i=0; i<al.size(); ++i) a[i]=al.get(i); 
	}
	static void reverse(long a[]){
		ArrayList<Long> al=new ArrayList<>();
		for(long i: a) al.add(i); Collections.reverse(al);
		for(int i=0; i<al.size(); ++i) a[i]=al.get(i); 
	}
	static void sort(int a[]) {
		ArrayList<Integer> al=new ArrayList<>();
		for(int i: a) al.add(i); Collections.sort(al);
		for(int i=0; i<a.length; ++i) a[i]=al.get(i);
	}
	static void sort(char a[]){
		ArrayList<Character> al=new ArrayList<>();
		for(char c: a) al.add(c); Collections.sort(al);
		for(int i=0; i<a.length; ++i) a[i]=al.get(i);
	}
	static void sort(long a[]){
		ArrayList<Long> al=new ArrayList<>();
		for(long i: a) al.add(i); Collections.sort(al);
		for(int i=0; i<a.length; ++i) a[i]=al.get(i);
	}
	static void sort(pair [] p){
		ArrayList<pair> pl=new ArrayList<>(); for(pair pa: p) pl.add(pa);
		Collections.sort(pl);
		for(int i=0; i<p.length; ++i) p[i]=pl.get(i);
	}
	static void reverse(pair[] p){
		int n=p.length;
		for(int i=0; i<p.length/2; ++i){
			pair tmp=new pair(0,0); tmp.copy(p[i]);
			p[i].copy(p[n-1-i]); p[n-1-i].copy(tmp);
		}
	}
	static class pair implements Comparable<pair>{
		long x,y; pair(long g, long h){x=g; y=h;}
		void copy(pair p){x=p.x; y=p.y;};
		public int compareTo(pair o) {return Long.compare(x,o.x)==0 ? Long.compare(y,o.y) : Long.compare(x,o.x);}
		public boolean equals(Object obj) {pair p=(pair)obj; return x==p.x && y==p.y;}
	}
	static class Reader{	
		BufferedReader br;
		StringTokenizer to;
		Reader(InputStream stream){
			br=new BufferedReader(new InputStreamReader(stream));
			to=new StringTokenizer("");
		}
		String nextLine() {
			String line="";
			try { line=br.readLine(); }catch(IOException e) {};
			return line;
		}
		String ns() {
			while(!to.hasMoreTokens()) { try { to=new StringTokenizer(br.readLine()); }catch(IOException e) {} }
			return to.nextToken();
		}
		int ni() { return Integer.parseInt(ns()); }
		long nl() { return Long.parseLong(ns()); }
		int [] ra(int n) { int a[]=new int[n]; for(int i=0; i<n; i++) a[i]=ni(); return a; }
		long [] rla(int n) { long [] a =new long[n]; for(int i=0; i<n; ++i) a[i]=nl(); return a; }
	}	
	static class Writer extends PrintWriter{
		Writer(OutputStream stream){ super(stream); }
		void println(pair p){ println(p.x+" "+p.y); }
		void println(int a[]){ for(int i: a) print(i+" "); println(); }
	}
}