#P7690. [CEOI2002] A decorative fence

[CEOI2002] A decorative fence

题目描述

理查德刚刚盖完他的新房子。现在房子唯一缺少的是一个可爱的小木栅栏。他不知道如何制作木栅栏,所以他决定订购一个。不知何故,他拿到了 ACME Fence Catalog 2002\texttt{ACME Fence Catalog 2002}――可爱的小木栅栏的旗舰版资源(注:ACME 是一家什么都造的公司)。看完它的前言,他已经知道,什么使小木栅栏变得可爱。
一个木栅栏由 NN 块木板组成,每块木板垂直排成一排。除此之外,当且仅当满足以下条件时,围栏看起来很可爱:

  • 木板有不同的长度,即 1,2,,N1,2,\cdots,N 为木板长度单位。
  • 每块有两个相邻的木板,它要么比它的相邻的都大,要么比它相邻的都小。(即,这会使得围栏顶部交替上升和下降(高低起伏))。

因此,我们可以用 NN 块木板将每个可爱的栅栏唯一地描述为一个排列 a1,,aNa_1,\cdots,a_Ni\forall i1<i<N1 < i < N(aiai1)×(aiai+1)>0(a_i − a_{i−1}) × (a_i − a_{i+1}) > 0,反之亦然,每个这样的排列都描述了一个可爱的围栏。
很明显,有许多不同的可爱木栅栏由 NN 块木板制成。为了将一些订单放入他们的清单,ACME 的销售经理决定订购它们以下列方式:栅栏 A(由排列 a1,,aNa_1,\cdots,a_N 表示)在栅栏 B 之前的清单(由 b1,,bNb_1,\cdots,b_N 表示)当且仅当存在这样的 ii,使得(j<i\forall j < iaj=bja_j = b_j 和 (ai<bia_i < b_i)。(还要决定,两个围栏中哪个在清单中更早,取它们对应的排列,找出它们第一个不同的地方,并比较这个地方的值。)所有 NN 块木板的可爱围栏都被按照它们在清单中出现的顺序编号(从 11 开始)。这个号码被称为他们的清单号。 TuLi 仔细检查所有的可爱的小木栅栏后,理查德决定要它们中的一些。他记下每块木板的数量和清单号。后来,他遇到了他的朋友,他想向他们展示他围栏,但他失去了清单。他得到的唯一的事情是他的笔记。请帮助他查明,他的围栏将为何等样子。

输入格式

第一行包含一个整数 KK。接下来 KK 行,每行描述一个输入数据集,每一行都包含两个以空格分割的整数 NNCCNN 是围栏上木板的数量,CC 是围栏的栅栏的清单号。

输出格式

每个数据集输出一行,描述列表带有 NN 个木板的第 CC 个栅栏。更准确地说,如果栅栏排列 a1,,aNa_1,\cdots,a_N,则输出的相应行应包含数字 aia_i(按正确顺序),由单个空格分隔。

2
2 1
3 3
1 2
2 3 1

提示

数据规模与约定

对于 100%100 \% 的数据,1K1001 \leq K \leq 1001N201 \leq N \leq 20。你可以认为,2020 块木板的可爱小木栅栏的总数适合转换为 6464 位有符号整数变量(C/C++ 中的 long long,FreePascal 中的 int64)。你也可以认为输入是正确的,特别是 CC 最小是 11 并且它不超过有 NN 块木板的可爱围栏的数量。

题目说明

来源于 CENTRAL-EUROPEAN OLYMPIAD IN INFORMATICS 2002 的 A decorative fence
由 @求学的企鹅 翻译整理。