#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const long long N = 5010;
int T;
int n;
int a[N], b[N];
vector<int> wz[N];
int main(){
scanf("%d", &T);
while(T--){
scanf("%d", &n);
for(int i = 1; i <= n; i++){
scanf("%d", &a[i]);
}
for(int i = 1; i <= n; i++){
scanf("%d", &b[i]);
}
bool ans = 0;
for(int i = 0; i < n; i++){
for(int j = 1; j <= n; j++){
wz[j].clear();
}
for(int j = 1; j <= n; j++){
wz[a[j]].push_back(j);
}
bool tans = 1;
int minn = 0;
for(int j = 1; j <= n; j++){
if(j < minn || a[j] != b[j]){
int at = lower_bound(wz[b[j]].begin(), wz[b[j]].end(), max(minn, j)) - wz[b[j]].begin();
if(at == wz[b[j]].size()){
tans = 0;
break;
}else{
minn = wz[b[j]][at];
}
}
}
if(tans){
ans = 1;
break;
}
int asw = a[1], bsw = b[1];
for(int j = 1; j < n; j++){
a[j] = a[j+1];
b[j] = b[j+1];
}
a[n] = asw;
b[n] = bsw;
// for(int j = 1; j <= n; j++){
// printf("%d ", a[j]);
// }
// puts("");
}
if(ans){
puts("Yes");
}else{
puts("No");
}
}
return 0;
}
ac 26个,wa34个。
思路是枚举断环成链,然后依次考虑每一位要从后方的哪里“推”过来。