import java.io.*;
import java.util.*;
import java.math.*;

public class D626 {

	public static BufferedReader read = null;
	public static PrintWriter out = null;
	public static StringTokenizer token = null;
	
	
	public static void solve()
	{
        int max = 10000;
		int n = nint();
		int[] a = narr(n);
        int[] d = new int[10000];
        for(int i=0; i<n; i++)
        {
            for(int j=i+1; j<n; j++)
            {
                d[Math.abs(a[i]-a[j])]++;
            }
        }
        int[] h = new int[10000];
        double prob = 0;
        for(int i =5000-1; i>=0; i--)
        {
            h[i] = d[i+1]+h[i+1];
        }
        double ways = (n)*(n-1)/2;
        for(int i=1; i<5000; i++)
        {
            for(int j = 1; j<5000; j++)
            {
                prob += (d[i]*1.0*d[j]*1.0*h[i+j])/(ways*ways*ways);
            }
        }
        out.printf("%10.10f", prob);
	}
	
	public static void main(String[] args)
	{
		read = new BufferedReader(new InputStreamReader(System.in));
		out = new PrintWriter(System.out);
		solve();
		out.flush();
		out.close();
		
	}
	
	// i/o functions
	public static String next() // returns the next string
	{
		while(token == null || !token.hasMoreTokens())
		{
			try {
				token = new StringTokenizer(read.readLine());
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return token.nextToken();
	}
	
	public static int nint()
	{
		return Integer.parseInt(next());
	}
	public static long nlong()
	{
		return Long.parseLong(next());
	}
	public static double ndouble()
	{
		return Double.parseDouble(next());
	}
	public static int[] narr(int n)
	{
		int[] a = new int[n];
		for(int i=0; i<n; i++) a[i] = nint();
		return a;
	}
	
	public static long[] nal(int n)
	{
		long[] a = new long[n];
		for(int i=0; i<n; i++) a[i] = nlong();
		return a;
	}
	
	
}
