错排+高精度 用java写的话简单明略
f[n]=(f[n−1]+f[n−2])×(n−1),其中f[1]=0,f[2]=1

import java.math.BigInteger;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner cin=new Scanner(System.in);
        BigInteger a[]=new BigInteger[205];
        while(cin.hasNext()) {
            int n=cin.nextInt();
            int x;
            for(int i=0;i<n;i++) {
                for(int j=0;j<n;j++)
                    x=cin.nextInt();
            }
            a[1]=BigInteger.valueOf(0);
            a[2]=BigInteger.valueOf(1);
            for(int i=3;i<=n;i++) {
                a[i]=(a[i-1].add(a[i-2])).multiply(BigInteger.valueOf(i-1));
            }
            System.out.println(a[n]);    
        }
    }
}