给定两个长度均为 n 的排列 p,q,要求求出:
给定两个排列p 和 q,长度都为n。请你求出p和 q 之间字典序最大的最长公共子序列。
【排列】:长度为 n 的排列是由 1,2,…,n 每个整数恰好出现一次组成的序列。例如:(2,3,1,5,4) 是一个长度为 5 的排列;而 (1,2,2) 和 (1,3,4) 都不是排列,因为前者存在重复元素,后者包含了超出范围的数。
【子序列】:在序列的顺序中删除任意个(可以为零、可以为全部)元素得到的新序列。
【公共子序列】:如果数组 a的一个子序列a′与数组 b 的一个子序列 b′ 完全相等,那么子序列 a′,b′就是数组a,b 的一个公共子序列。
【字典序比较】:从数组的第一个元素开始逐个比较,直到找到第一个不同的位置,通过比较这个位置元素的大小得出数组的大小,称为字典序比较。
每个测试文件包含多组测试数据:第一行输入一个整数 T(1≤T≤105),代表数据组数。
每组测试数据描述如下:
除此之外,保证单个测试文件的 n 之和不超过2⋅105。
对于每组测试数据:先输出一行一个整数 k(1≤k≤n),代表 p 和 q 的最长公共子序列长度。
第二行输出 k 个不同整数 r1,r2,…,rk,代表你找到的字典序最大的最长公共子序列。
输入
3
4
1 3 2 4
3 4 1 2
5
1 2 3 4 5
5 4 3 2 1
9
9 2 6 7 3 8 1 4 5
6 2 7 9 4 8 3 5 1
输出
2
3 4
1
5
4
6 7 8 5