Siteswap (https://en.wikipedia.org/wiki/Siteswap) 是一种用于表示杂耍模式的记谱法。
在 siteswap 中,假设抛接动作由两只手交替在等间距的时间节拍上完成。一个 siteswap 模式是一个数字序列,其中抛接动作由非负整数表示,这些整数指定了物体在被接住并再次抛出之前所经过的节拍数。
换句话说,一个 siteswap 模式是一个序列 $a_1, a_2, \dots, a_n$,其中 $a_k$ 描述了在第 $k$ 个节拍上进行的抛接动作,意味着该物体在 $a_k$ 秒后被接住并再次抛出,即在第 $(k + a_k)$ 个节拍上。
例如,数字 1 表示物体被传给另一只手,并在下一回合立即被抛出;数字 2 表示同一只手在同一物体上进行下一次抛接。模式中的特殊数字 0 表示在该节拍上这只手是空的。更多示例请参见说明部分。
如果一个 siteswap 模式可以无限重复,且在每个节拍上当前手最多接住并立即抛出一个物体,则该模式是有效的。
对于每个有效的模式,可以唯一确定执行它所需的物体数量。我们可以进一步将这些物体分类为:最终会改变抛接手的物体,以及不会改变抛接手的物体。给定一个有效的 siteswap 模式,求出每只手不改变抛接手的物体数量,以及会改变抛接手的物体数量。
输入格式
每个测试包含多个测试用例。第一行包含测试用例的数量 $t$ ($1 \le t \le 100$)。接下来是各测试用例的描述。
每个测试用例的第一行包含一个整数 $n$ ($1 \le n \le 10^5$),表示 siteswap 模式的长度。
第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$ ($0 \le a_i \le 10^9$),表示一个有效的 siteswap 模式。
保证所有测试用例的 $n$ 之和不超过 $10^5$。
输出格式
对于每个测试用例,输出三个数字:
- 仅由第一只手抛接的物体数量(即仅在奇数节拍上)。
- 仅由第二只手抛接的物体数量(即仅在偶数节拍上)。
- 由两只手交替抛接的物体数量。
样例
样例输入 1
3 3 1 5 0 6 4 6 4 0 4 0 2 6 4
样例输出 1
0 0 2 2 1 0 3 2 0
说明
模式 1 5 0 需要 2 个物体,每个物体都在两只手之间交替:
注意,由于模式中存在 0,有时会跳过一次抛接。在杂耍动画中,你可以通过同一只手连续使用两次来发现这一点,在图表中它由灰色部分表示。
模式 4 6 4 0 4 0 需要 3 个物体,其中 2 个由一只手抛接,1 个由另一只手抛接:
插图来自 Siteswap Explorer: https://siteswapexplorer.com/。
对于使用打印版或 PDF 版题目的选手:这些插图是动画。请参考竞赛系统中的题目说明以查看动画。