捷克技术大学校园由 $n$ 栋建筑组成,编号从 1 到 $n$。每栋建筑内可能安排了一门数学课、一门计算机科学课,或者什么课都没有(但不能同时有两门课)。此外,每栋建筑内最多有一位教授,且每位教授要么是数学专家,要么是计算机科学专家。
作为 University Express Inc. 的实习生,你的工作是快速将教授运送到他们的课堂。为此,你获得了一辆全新的双人滑板车,除了你自己外,最多只能搭载一名乘客。
最初,滑板车上只有你一个人。当你到达一栋建筑时,你可以从该建筑接走或放下教授。为了提高任务效率,你被允许按照你选择的顺序,最多访问每栋建筑一次(你也可以决定从哪里开始行程)。
行程结束后,在每一栋安排了数学课的建筑中,必须有一位数学专家教授;在每一栋安排了计算机科学课的建筑中,必须有一位计算机科学专家教授。
请设计一个行程,使得所有课程都能顺利开课。
输入格式
第一行包含一个整数 $n$ ($1 \le n \le 2000$),表示校园内建筑的数量。
第二行包含一个长度为 $n$ 的字符串 $c$,由字符 -、C、M 组成。第 $i$ 个字符表示第 $i$ 栋建筑中安排的课程科目。C 代表计算机科学,M 代表数学,- 代表第 $i$ 栋建筑没有安排课程。
第三行包含一个长度为 $n$ 的字符串 $p$,由字符 -、C、M 组成。第 $i$ 个字符表示第 $i$ 栋建筑中教授的专业(如果该建筑内有教授)。C 代表计算机科学,M 代表数学,- 代表第 $i$ 栋建筑没有教授。
保证对于所有给定的测试用例,都存在一个合法的行程。
输出格式
第一行输出一个整数 $l$,表示你所选行程中的操作次数。
接下来的 $l$ 行中,第 $i$ 行 ($1 \le i \le l$) 必须包含以下三条指令之一:
- DRIVE $x$ — 前往编号为 $x$ 的建筑 ($1 \le x \le n$);
- PICKUP — 接走最初位于当前建筑的教授;
- DROPOFF — 在当前建筑放下随行的教授。
为了使行程合法,必须满足以下条件:
- 不得有两条 DRIVE 指令前往同一栋建筑;
- 在每栋特定建筑中,最多只能执行一次 DROPOFF 和一次 PICKUP 指令(且顺序必须是先 DROPOFF 后 PICKUP,如果两者都有);
- 对于所有 PICKUP 指令,该建筑最初必须有教授,且滑板车上当前没有乘客;
- 对于所有 DROPOFF 指令,执行指令时滑板车上必须载有一名教授;
- 行程结束后,对于每一栋有课的建筑,必须有一位对应科目的专家教授(无论是最初就在该建筑,还是通过 DROPOFF 送达)。
注意,特别地,你不能接走你刚刚放下的一位教授,否则行程无效。
样例
输入 1
3 CM- -CM
输出 1
7 DRIVE 3 PICKUP DRIVE 2 DROPOFF PICKUP DRIVE 1 DROPOFF
说明 1
你首先开车前往 3 号建筑。然后接走数学教授。在将他送到 2 号建筑(那里有数学课)后,你从那里接走计算机科学教授,并将她送到 1 号建筑,完成你的行程。
输入 2
1 C C
输出 2
0
输入 3
2 -M MC
输出 3
4 DRIVE 1 PICKUP DRIVE 2 DROPOFF