#91. 「2024 广东省赛」分治乘法

内存限制:512 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:Special Judge
上传者: woruo

题目描述

欢迎加入广东最大网戒中心(广东民间OIer、XCPCer交流群):825777247

题目背景

小艾想要挑战分治乘法。TA 将策略抽象成了如下问题:

现在给定一个目标集合 ,该集合是 的一个子集()。你需要通过一系列操作构造一些集合最后得到 ,具体来说有以下三种操作:

  • 创造一个大小为一的集合
  • 将已经被构造出的两个不交集合 并起来,得到
  • 将已经被构造出的一个集合 进行平移,也即

一个已经被构造出的集合可以在之后被使用多次。同时你需要保证操作过程中出现的所有集合都是 的子集。

你的代价是构造出的所有集合的大小之和,你不需要最小化代价,只需要让代价控制不超过 即可。你用的操作数量也不应超过

输入格式

从标准输入读入数据。

第一行输入一个正整数

接下来一行输入一个 01 串,长度为 ,第 位为 1 表示 ,否则 ,保证 非空。

输出格式

输出到标准输出。

第一行输出一个正整数 表示你使用的操作数量。

接下来 行,每行描述一个操作,设第 次操作得到的集合为

  • 1 x 表示创造一个大小为一的集合
  • 2 x y 表示将不交集合 并起来。
  • 3 x y 表示将已经被构造出的一个集合进行平移,也即

你需要保证所有操作满足题目要求,并且最后一次操作产生的集合是

样例1输入

5
11011

样例1输出

5
1 1
1 4
2 1 2
3 3 1
2 3 4

样例1解释

  • 第一次操作:创造集合
  • 第二次操作:创造集合
  • 第三次操作:将 并起来,得到
  • 第四次操作:将 平移 ,得到
  • 第五次操作:将 并起来,得到 。这就得到了

这个方案的总代价是

提示

如果你的复杂度是好的,请相信常数。

输入格式

place holder

输出格式

place holder

样例

place holder

数据范围与提示

place holder