第四题 AC
public class Main {

    private static int[] arr={0,1,2,3,4,5,6,7,8,9};

    private static int count=0;

    private static Set<String> set=new HashSet<>();


    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        count=0;
        int n=in.nextInt();
        if(n<=1)
        {
            System.out.println(0);
            return;
        }
        int[] arr=new int[n];
        for(int i=0;i<n;i++)
        {
            arr[i]=in.nextInt();
        }
        is(arr,0);
        System.out.println(count);

    }

    private static void is(int[] arr,int index)
    {
        if(index>=arr.length)
        {
            String str=Arrays.toString(arr);
            if(!set.contains(str))
            {
                if(is(arr))
                {
                    count++;
                }
                set.add(str);
            }

        }
        for(int i=index;i<arr.length;i++)
        {
            swap(arr,i,index);
            is(arr,index+1);
            swap(arr,i,index);
        }
    }

    private static void swap(int[] arr,int i,int j)
    {
        if(i==j)
        {
            return;
        }
        int temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }


    private static boolean is(int[] arr)
    {
        for(int i=1;i<arr.length;i++)
        {
            if(!is(arr[i-1]+arr[i]))
            {
                return false;
            }
        }
        return true;
    }

    private static boolean is(int n)
    {
        double d=Math.sqrt(n);
        double ds=0;
        for(int a:arr)
        {
            for(int i=0;i<arr.length;i++)
            {
                ds=d%arr[i];
                if(ds==a)
                {
                    return true;
                }
            }
        }
        return false;
    }

}