#include #include #include #include #include using namespace std; #define N 30 int n; int as[N],ids[N]; int vss[N][N]; int lis(int* vs) { for (int i=0;iub) return 0; if (step>ub) return 0; if (k==n) return 1; int fr=0,to=n-1; while(vs[fr]==fr) ++fr; while(vs[to]==to) --to; int* nvs=vss[step+1]; for (int i=fr;i<=to;++i) { int v=vs[i]; memcpy(vss[step+1],vss[step],sizeof(vss[step])); if (i=v;--j) nvs[j+1]=vs[j]; } nvs[v]=v; if (solve(nvs,step+1,ub)) return 1; } return 0; } int main() { scanf("%d",&n); for (int i=0;i