Solution

先给一个非常规的解法, 打暴力找
图片说明
直接看 (公式), 有
这时候点进去找 是什么, 得到下面结果

有递推式子
于是

打暴力Code

int ans, n;
int maze[105][105];
void dfs(int x) {
  if(x == n + 1) {
    int flag = 0;
    for(int i = 1; i <= n; i++) {
      for(int j = 1; j <= n; j++) {
        if(maze[i][j] != maze[j][i]) {
          flag = 1;
        }
      }
    }
    if(!flag) ans++;
    return ;
  }
  for(int i = 1; i <= n; i++) {
    maze[x][i] = 1;
    dfs(x + 1);
    maze[x][i] = 0;
  }
}

Code

/*
  autor: Kurisu
  2020年4月30日16:48:49
*/
#include<bits/stdc++.h>
using namespace std;

const long long inf = 1e18;
const int N = 1e5 + 5;
const double eps = 1e-10;
const int mod = 1e9 + 7;
typedef long long ll;
int n;
ll fun(ll x) {
  return x >= mod ? x % mod : x;
}
ll dp[N];
int main() {
  scanf("%d", &n);
  dp[2] = 1, dp[3] = 3;
  for(int i = 4; i <= n; i++) {
    dp[i] = fun(dp[i - 1] + (1 + dp[i - 2]) * (i - 1));
  }
  printf("%lld\n", dp[n] + 1);
  return 0;
}
// 3 + 2 * 3 = 9