#CF1949G. 电动滑板车

电动滑板车

G. 电动滑板车

单个测试点时间限制22单个测试点内存限制512512 兆字节

捷克理工大学校园由 nn 栋建筑组成,编号从 11nn。 在每栋建筑中,可能安排有数学课、计算机课,或者两者都没有(但不会同时有)。 此外,每栋建筑内最多有一名教授,每位教授要么擅长数学,要么擅长计算机。

作为大学快运公司的实习生,你的任务是快速把教授送到他们对应的课堂。 为此,你配备了一辆全新的双人电动滑板车:可以载你本人,外加最多一名乘客

初始时,滑板车上只有你。 当你到达一栋建筑时,你可以让教授在这栋建筑上车(接走)下车(放下)。 为了提高效率,你被允许前往每栋建筑最多一次,顺序可以自己决定(也可以自由选择起点)。

在行程结束后,必须满足:

  • 所有安排了数学课(M)的建筑,必须有一名数学教授
  • 所有安排了计算机课(C)的建筑,必须有一名计算机教授

请构造一个合法的行程。


输入格式

第一行一个整数 n (1n2000)n\ (1\le n\le 2000) —— 建筑数量。

第二行一个长度为 nn 的字符串 cc,由 -CM 组成: 第 ii 个字符表示第 ii 栋楼的课程安排。 C = 计算机课,M = 数学课,- = 无课。

第三行一个长度为 nn 的字符串 pp,由 -CM 组成: 第 ii 个字符表示第 ii 栋楼的教授类型(若有)。 C = 计算机教授,M = 数学教授,- = 无教授。

保证至少存在一个合法方案


输出格式

第一行输出一个整数 ll —— 行程中的操作总数。

接下来 ll 行,每行是以下三种指令之一:

  • DRIVE x:前往编号为 xx 的建筑(1xn1\le x\le n);
  • PICKUP:接走当前建筑原本就有的那位教授;
  • DROPOFF:把车上的教授放下到当前建筑。

合法行程必须满足:

  • 不能重复 DRIVE 同一栋建筑;
  • 每栋楼最多按顺序执行一次 DROPOFF 和一次 PICKUP
  • 执行 PICKUP 时,该建筑原本必须有教授,且车上没有乘客
  • 执行 DROPOFF 时,车上必须有教授
  • 行程结束后,所有有课的建筑都必须有对应类型的教授。

特别注意:你不能接走自己刚刚放下的教授。


样例输入 1

3
CM-
-CM

样例输出 1

7
DRIVE 3
PICKUP
DRIVE 2
DROPOFF
PICKUP
DRIVE 1
DROPOFF

样例输入 2

1
C
C

样例输出 2

0

样例输入 3

2
-M
MC

样例输出 3

4
DRIVE 1
PICKUP
DRIVE 2
DROPOFF

样例说明

第一个样例: 你先开车到 3 号楼,接走数学教授; 开到 2 号楼放下他(这里有数学课); 再从 2 号楼接走计算机教授; 开到 1 号楼放下她(这里有计算机课),完成任务。