#P15705. [2026作业]单面电路布线

[2026作业]单面电路布线

题目描述

Dongkyu 正在设计一块单面印刷电路板。你可以把电路板看作无限大的二维平面,把焊盘看作平面上的点,把导线看作平面上的连通折线。

电路中共有 2n2n 个焊盘,它们按水平方向排列。自左向右第 ii 个焊盘位于坐标

(i1,0).(i-1,0).

每个焊盘都有一个标签,标签是 11nn 之间的整数。对于每个 1in1\le i\le n,恰好有两个焊盘的标签为 ii

你需要绘制 nn 条导线,将标签相同的两个焊盘连接起来。每条导线必须是一条由若干条线段组成的折线,并满足:

  • 每条线段长度为正整数;
  • 每条线段平行于坐标轴;
  • 导线从一个焊盘出发,到另一个同标签焊盘结束;
  • 任意两条导线不能有公共点。

请判断是否能完成布线。如果可以,输出任意一种合法方案。

输入格式

第一行包含一个整数 nn

第二行包含 2n2n 个整数 pip_i,表示自左向右第 ii 个焊盘的标签。

保证每个 11nn 之间的整数都恰好出现两次。

输出格式

如果无法完成符合要求的布线,输出一行:

NO

否则第一行输出:

YES

接下来输出 nn 行,按标签编号从小到大描述对应导线。

对于标签为 ii 的导线,必须从这两个焊盘中较靠左的那个焊盘出发。该行首先输出整数 LiL_i,表示导线由多少条线段组成,要求

1Li10.1\le L_i\le 10.

接下来依次输出每条线段的方向和长度。方向用一个字符表示:

  • D:向下,即 yy 减小;
  • U:向上,即 yy 增大;
  • R:向右,即 xx 增大;
  • L:向左,即 xx 减小。

每条线段长度必须为正整数。请用空格分隔字母和整数。

每条折线不能自交,也不能自触。不同折线之间不能有公共点。所有折线顶点坐标的绝对值都不能超过 10410^4

如果存在多种方案,输出任意一种即可。

数据范围

  • 1n10001\le n\le 1000
  • 1pin1\le p_i\le n
  • 每个 11nn 的整数在序列 pp 中恰好出现两次。

样例 1

输入

4
1 2 3 4 1 2 3 4

输出

YES
3 U 1 R 4 D 1
5 D 1 L 2 U 3 R 6 D 2
5 D 2 R 6 U 3 L 2 D 1
3 D 1 R 4 U 1

样例 2

输入

4
1 2 3 4 1 3 2 4

输出

NO

样例说明

样例 1 中,输出给出了一种可行布线方案。样例 2 中,不可能在不相交的条件下连接所有相同标签的焊盘。