SP16284 TAP2013J - Game of stones

题目描述

Jaimito 十分喜欢玩他生日时得到的 **N** 块相同的石头,并将它们堆成不同大小的石堆。要是他的妈妈 Jimena 不总是在一天结束时提醒他进行「整理石堆」(TAP),他会更加开心。所谓 TAP,就是 Jaimito 需要拆掉他辛苦堆起的石山。 为了让这个他讨厌的任务变得有趣,Jimena 提议和他玩一个游戏。他们轮流进行游戏,因为 Jaimito 年龄最小,所以由他先开始。游戏一开始有一些山,每座山由若干石块组成。在每一回合,每个玩家必须从多于一块石头的山中选择一个并将它分成两堆,不要求这两堆大小相同。游戏持续进行,直到某位玩家无法再进行有效操作为止,此时该玩家就输掉比赛,另一位玩家获胜。 Jaimito 是个聪明的孩子,他想通过策略性地分配这 **N** 块石头来保证在游戏中取得胜利。对他而言,只有当两种初始分法的山的数量不同,或是石块在山中的分配不同,他才认为这两种分法是不同的。例如,对于 **N = 4** 块石头,他可以用五种不同的方式来分配:四座山每座各一块石头;两座山各一块石头,另一座山两块石头;一座山一块石头,另一座山三块石头;两座山各两块石头;最后,一座山四块石头。 为了不被妈妈察觉他在作弊,Jaimito 希望每天都能更换初始石堆的分配方式。他相信这种能确保他获胜的不同分法有很多,但具体多少却不清楚。例如,对于 **N = 4** 的情况,他只有两种能获胜的分法:一座山四块石头,或者两座山各一块石头,另一座山两块石头。你的任务是帮助 Jaimito 计算出不同的石堆分配方法数量,使得他可以保证在和 Jimena 的游戏中获胜。这样,Jaimito 就可以安心应对每一天,而不必担心妈妈察觉他的策略。

输入格式

第一行输入一个整数 **T**,表示测试用例的数量($1 \le T \le 100$)。接下来的 **T** 行,每行输入一个整数 **N**,表示 Jaimito 拥有的石头数量($2 \le N \le 1000$)。

输出格式

对于每个测试用例,输出一个整数,表示可以用不同的方式分配 **N** 块石头形成初始的山堆,并确保 Jaimito 能获胜的方法数。由于答案可能很大,只需输出结果对 $10^9 + 7$ 取余后的值。 **本翻译由 AI 自动生成**