我们把根节点去掉,得到m棵子树,这些子树的形状一定是相同的,
而且节点数也一定相同,


因此我们考虑 把(n-1)个节点分成m份,F[N]+=F((N-1)/M),

因为要平均分,所以M是N-1的约数

有一颗又n个节点的树形态不固定。我们对它的形态只有一个要求,那就是同一层的节点所跟的孩子的数目相同,问这个数有多少种形态,结果对1000000007取模

 

Input

每行输入一个数n(1<=n<=1000)

Output

输出结果mod1000000007

 

Sample Input

1

2

3

40

50

600

700

Sample Output

1

1

2

924

1998

315478277

825219749

#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
int f[1005];
int a[1005];
int cnt;
void init(int n)
{
     cnt=0;
    // memset(a,0,sizeof(a));
     for(int i=1;i*i<=n;i++)
     {
          if(n%i==0)
          {
               a[cnt++]=i;
               if(i*i!=n) a[cnt++]=n/i;
          }
     }
}
void ans()
{
     //memset(f,0,sizeof(f));
     f[1]=1;
     for(int i=2;i<1005;i++)
     {
          init(i-1);
          for(int j=0;j<cnt;j++)
          f[i]=(f[i]+f[(i-1)/a[j]])%1000000007;
     }
}
int main()
{
     int n;
     ans();
     while(~scanf("%d",&n))
     {
          printf("%d\n",f[n]);
     }
     return 0;
}