来自 2026 清华大学学生程序设计竞赛暨高校邀请赛(THUPC2026)初赛。
题解等资源可在 https://gitlink.org.cn/thusaa/thupc2026pre 查看。
WCat 在玩一个覆盖游戏。
现在他有一个 的方格表,第 行第 列的格子编号为 。这个方格表有 个格为黑格,其余为白格,满足任意两个黑格既不同行也不同列。
对每个正整数 ,WCat 手上有无穷多个 的红色矩形,也有无穷多个 的蓝色矩形。WCat 需要用手上的这些矩形来覆盖方格表。
在这个填充游戏中,红色矩形只能横向放置,蓝色矩形只能纵向放置。更具体地说,对于一个 的红色矩形,WCat 可以选择正整数 满足 ,并用此红色矩形覆盖编号为 的方格;对于一个 的蓝色矩形,WCat 可以选择正整数 满足 ,并用此蓝色矩形覆盖编号为 的方格。
WCat 需要用手上的这些矩形互不重叠地覆盖所有白格,同时不能覆盖到黑格。如果 WCat 用了 个矩形,那么他就赢了这个游戏。
在两种覆盖方案中,两个矩形称为相同的,如果它们的颜色相同,且所覆盖的白格的编号集合相同;反之,两个矩形称为不同的。
WCat 想要知道他有多少种覆盖方案能够赢得这个覆盖游戏。两种覆盖方案不同,当且仅当存在一个白格,它在第一种覆盖方式中覆盖它的矩形与第二种覆盖方式中覆盖它的矩形不同。由于方案数可能很多,你只需要给出方案数对 取模后得到的结果。