#P15614. [2024年保加利亚国家队组队赛Senior]Enchoveka恩乔维卡

    ID: 14826 传统题 3000ms 512MiB 尝试: 1 已通过: 1 难度: 6 上传者: 标签>动态规划算法基础前缀和数学CF2100

[2024年保加利亚国家队组队赛Senior]Enchoveka恩乔维卡

题目描述

在 Enchoveka 的餐馆里,有 N 个人,编号为 1,2,...,N。他们围坐在一张圆桌旁,使得:

  • 对于 1 < i <= N,编号为 i 的人坐在编号为 i-1 的人的右边;
  • 编号为 1 的人坐在编号为 N 的人的右边。

餐馆里只允许谈论 K 个特定话题,话题编号为 1,2,...,K。每个人都对其中的一部分话题感兴趣,并且每个人至少对一个话题感兴趣

Enchoveka 不希望餐馆变成嘈杂的地方,因此每一场谈话都只能发生在圆桌上连续的一段人之间。现在他希望把这 N 个人划分成若干组,使得:

  • 每个人恰好属于一组
  • 每一组中的人都坐在圆桌上的连续位置;
  • 对于每一组,至少存在一个话题,是这一组所有人都共同感兴趣的。

请你计算:满足上述条件的分组方案数有多少种。答案对 10^9 + 7 取模。


输入格式

第一行输入两个正整数 NK,分别表示人数和话题数。

接下来 N 行,每行包含一个长度为 K01 串,表示对应那个人对哪些话题感兴趣:

  • 若第 i 行第 j 个字符为 1,则表示编号为 i 的人对编号为 j 的话题感兴趣;
  • 若为 0,则表示不感兴趣。

输出格式

输出一个整数,表示合法分组方案数对 10^9 + 7 取模后的结果。


数据范围

  • 1 <= N × K <= 10^7

子任务

子任务 分值 额外限制
1 8 N <= 100K <= 60
2 13 N <= 2000K <= 60
3 19 N <= 10^5K <= 10
4 21 N <= 10^5K <= 60
5 20 N × K <= 2 × 10^6
6 19 无额外限制

样例

输入

3 3
101
110
011

输出

4

样例解释

共有 4 种不同的合法划分:

  1. 三个人都各自单独成组;
  2. 第 1 人和第 2 人在同一组,第 3 人单独成组;
  3. 第 2 人和第 3 人在同一组,第 1 人单独成组;
  4. 第 1 人和第 3 人在同一组,第 2 人单独成组。

说明

虽然题目背景是“围成一圈”,但分组时要求的是每组对应圆桌上的一段连续区间,因此本质上需要处理环形划分计数问题。

由于 K <= 60 的子任务较强,通常需要考虑用位运算 / 位集来表示共同感兴趣的话题集合。