#2963. 前缀或者翻转

前缀或者翻转

题目描述

你有一个数组 a[]a[],你可以对该数组执行任意次下述两种操作:

  • 操作一:对该数组进行前缀和操作,即对 i[2,n]i \in [2,n],依次执行 ai=ai+ai1a_i = a_i + a_{i-1}
  • 操作二:翻转该数组一次,即对于 in2i \leq \lfloor \frac{n}{2} \rfloor,交换 aia_ian+1ia_{n+1-i}

问是否可能把 a[]a[] 数组变成 b[]b[] 数组。 如果存在多种方式的话,请优先保证操作一执行的次数尽量少。

在某些情况下,我们不仅仅满足知道存在性即可,并且要求你给出一种可能的操作序列(具体输出请参考输出格式)。

多组数据输入

输入格式

第一行输入一个数 TT,表示 TT 组测试数据:

每组数据第一行输入 1 个数 nn。 接下来一行输入 nn 个数表示 aia_i。 接下来一行输入 nn 个数表示 bib_i。 最后一行有一个数 opopopop 等于 0 则表示只需要输出操作一的最小执行次数,opop 等于 1 则表示还需要输出方案。

输出格式

对于每组数据:

如果不可能通过有限次操作把数组 a[]a[] 变成 b[]b[],则输出 -1。 否则输出一行 cnt1cnt1 表示需要最少的操作一的次数。 对于 opop 等于 1 的情况,你还需要输出一行仅由 RP 组成的字符串表示变化过程,其中:

  • R 表示执行翻转操作;
  • P 表示执行前缀和操作。

要求输出的字符串长度不超过 500000,且恰好有 cnt1cnt1P,如果有多种操作序列,可以输出任意一种操作序列。 输入保证opop 等于 1 的时候,答案 cnt1[1,200000]cnt1 \in [1, 200000]

样例

输入样例 1

2
2
5 7
5 7
0
2
10 1
13 14
1

输出样例 1

0
4
RPPPRP

输入样例 2

2
2
1 1
300000 1
0
3
1 2 1
2 1 2
0

输出样例 2

299999
-1

提示

TT nn aia_ibib_i opop 分数占比
<= 10 = 2 [1,1012]\in [1, 10^{12}] = 0 16
[0,1]\in [0,1] 24
<=200000 = 0 28
[0,1]\in [0,1] 32