/* C++ program to calculate A118986 Author: M. Wang Email Address: atvv@foxmail.com Compiler: MinGW compiler Compiler Version: v4.9.2 (tdm64-1) OEIS URL: https://oeis.org/A118986 Output: 2 3 6 14 46 176 908 5802 ... */ #include <iostream> #include <ctime> #include <cassert> #include <cstring> #include <vector> #include <string> #include <set> #include <map> using namespace std; #define min(a,b) (((a)<(b))?(a):(b)) #define max(a,b) (((a)>(b))?(a):(b)) #define min_(a,b) {if(a>(b))a=(b);} #define max_(a,b) {if(a<(b))a=(b);} #if defined _MSC_VER || defined __MINGW32__ #define I64 "I64" #else #define __int64 long long #define I64 "ll" #endif set<int> st; int row[333][333]; unsigned n; int str[333]; int invcnt=1; int detval; void per_dfs(int k){ if(k!=n){ int i; if(row[k][str[k]])per_dfs(k+1); for(i=k+1;i<n;i++){ if(row[k][str[i]]){ swap(str[i],str[k]); per_dfs(k+1); swap(str[i],str[k]); } } } else{ detval+=invcnt; } } void det(){ detval=0; per_dfs(0); st.insert(detval); } void dfs(int rid,int cid){ if(cid>=n){ rid++; if(rid>=n){ det(); return; } cid=rid; } row[rid][cid]=row[cid][rid]=0; dfs(rid,cid+1); row[rid][cid]=row[cid][rid]=1; dfs(rid,cid+1); } int main(int argc,char ** argv){ for(n=1;;n++){ st.clear(); int i; for(i=0;i<n;i++){ str[i]=i; } dfs(0,0); printf("%u\n",st.size()); } return 0; }