CF1949G Scooter

题目描述

捷克技术大学的校园内有 $n$ 栋建筑,编号从 $1$ 到 $n$。每栋建筑可能安排一堂数学课或一堂计算机课,或者没有安排任何课程(不能同时安排两门课)。此外,每栋建筑最多有一位教授,这位教授要么擅长数学,要么擅长计算机科学。 作为 University Express Inc. 的实习生,你的任务是快速将教授送到他们的课堂。公司为你提供了一辆全新的双人滑板车,能载你和最多一位乘客。 开始时,滑板车上只有你。当你到达某栋建筑时,可以接上或送下教授。为了提高效率,你可以选择任意顺序访问这 $n$ 栋建筑中的每一栋建筑,但每栋建筑只能访问一次(你可以选择从哪栋建筑开始)。 在行程结束后,每栋安排了数学课的建筑必须有一位数学教授,每栋安排了计算机课的建筑必须有一位计算机教授。 请设计一条路线,使所有课程得以进行。

输入格式

第一行输入一个整数 $n$ ($1 \le n \le 2000$),表示建筑的数量。 第二行输入一个长度为 $n$ 的字符串 $c$,由字符 $\texttt{-}$、$\texttt{C}$ 和 $\texttt{M}$ 组成。第 $i$ 个字符表示第 $i$ 栋建筑安排的课程类型,其中 $\texttt{C}$ 表示计算机科学课,$\texttt{M}$ 表示数学课,$\texttt{-}$ 表示没有安排课程。 第三行输入一个长度为 $n$ 的字符串 $p$,由字符 $\texttt{-}$、$\texttt{C}$ 和 $\texttt{M}$ 组成。第 $i$ 个字符表示第 $i$ 栋建筑内教授的专业,其中 $\texttt{C}$ 表示计算机科学专家,$\texttt{M}$ 表示数学专家,$\texttt{-}$ 表示没有教授。 保证对于输入的所有测试数据,至少有一种有效的行程。

输出格式

第一行输出一个整数 $l$,表示你设计的行程方案包含的操作数量。 接下来的 $l$ 行中,每行描述一个操作,可以是以下三种指令之一: 1. $\texttt{DRIVE } x$ —— 驶向编号为 $x$ 的建筑($1 \leq x \leq n$); 2. $\texttt{PICKUP}$ —— 在当前建筑接上教授; 3. $\texttt{DROPOFF}$ —— 在当前建筑放下教授。 要确保行程方案有效,必须满足以下条件: 1. 每个 $\texttt{DRIVE}$ 指令只能驶往不同的建筑; 2. 在每栋建筑上,最多只能执行一条 $\texttt{PICKUP}$ 和一条 $\texttt{DROPOFF}$ 指令,且顺序为先接后送; 3. 执行 $\texttt{PICKUP}$ 指令时,当前建筑必须有一位教授,且滑板车上必须为空; 4. 执行 $\texttt{DROPOFF}$ 指令时,滑板车上必须已经有一位教授; 5. 行程结束时,所有安排了课程的建筑都必须有适合的专业教授驻扎(无论是原本就在那里的,还是由你接送过去的)。 特别注意,不能在刚送下教授后,又立即将相同的教授接上。 ## 提示 在第一个样例中,你首先驾驶滑板车去第 $3$ 号建筑,接上数学教授,然后送到第 $2$ 号建筑,因为那里有一节数学课。接着,你在第 $2$ 号建筑接上计算机科学教授,并将她送到第 $1$ 号建筑,完成整个行程。 **本翻译由 AI 自动生成**

说明/提示

In the first sample, You start by driving to building number $ 3 $ . You then pick up the mathematics professor. After dropping him off at building number $ 2 $ , where a mathematics class is being held, you pick up the computer science professor from there, and drop her off at building number $ 1 $ , finishing your itinerary.