#include <iostream>
#include <stack>
#include <vector>
using namespace std;
int main() {
int q;
cin >> q;
while (q--) {
int n;
cin >> n;
vector<int> ruzhanxulie(n);
vector<int> chuzhanxulie(n);
// 读取入栈序列
for (int i = 0; i < n; i++) {
cin >> ruzhanxulie[i];
}
// 读取出栈序列
for (int i = 0; i < n; i++) {
cin >> chuzhanxulie[i];
}
stack<int> zhan;
int shijilu = 0;
bool panduan = true;
for (int i = 0; i < n; i++) {
int target = chuzhanxulie[i];
// 如果栈为空或者栈顶不是目标元素,就继续入栈直到找到目标
while (shijilu < n && (zhan.empty() || zhan.top() != target)) {
zhan.push(ruzhanxulie[shijilu++]);
}
// 检查栈顶是否等于目标元素
if (!zhan.empty() && zhan.top() == target) {
zhan.pop();
} else {
panduan = false;
break;
}
}
if (panduan && zhan.empty()) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
}
return 0;
}
// 64 位输出请用 printf("%lld")