用户:
蒟蒻OIer1048576查看:0 回复:2 评论:0 创建时间:2021-12-06T19:15:33
#include<iostream>
using namespace std;
signed t, n;
signed a[200005], b[200005];
signed main() {
cin >> t;
while (t--) {
bool ok = 0;
cin >> n;
for (signed i = 1; i <= (n << 1); i++) {
cin >> a[i];
}
for (signed i = 1; i <= (n << 1); i++) {
cin >> b[i];
}
signed cnt1 = 0, cnt2 = 0;
for (signed i = 1; i <= (n << 1); i++) {
if (a[i] - b[i] == 1 || a[i] == 1 && b[i] == 3) { // 判断:A --输--> B
if (cnt1 < n) { // 改A成B的克
cnt1++;
if (b[i] == 1)
a[i] = 3;
else if (b[i] == 2)
a[i] = 1;
else if (b[i] == 3)
a[i] = 2;
}
else if (cnt2 < n) { // 改B成A的被克
cnt2++;
if (b[i] == 1)
b[i] = 3;
else if (b[i] == 2)
b[i] = 1;
else if (b[i] == 3)
b[i] = 2;
}
else {
ok = 1;
break;
}
}
else {
continue;
}
}
if (ok == 1) {
signed ans = 0;
for (signed i = 1; i <= (n << 1); i++) {
if (a[i] - b[i] == -1 || a[i] == 3 && b[i] == 1) {
ans++;
}
else if (a[i] == b[i]) {
continue;
}
else {
ans--;
}
}
cout << ans << endl;
for (signed i = 1; i <= (n << 1); i++) {
cout << a[i] << " ";
}
cout << endl;
for (signed i = 1; i <= (n << 1); i++) {
cout << b[i] << " ";
}
cout << endl;
}
else {
for (signed i = 1; i <= (n << 1); i++) {
if (a[i] == b[i]) {
if (cnt1 < n) {
cnt1++;
if (b[i] == 1) {
a[i] = 3;
}
else if (b[i] == 2) {
a[i] = 1;
}
else if (b[i] == 3) {
a[i] = 2;
}
}
else if (cnt2 < n) {
cnt2++;
if (b[i] == 1) {
b[i] = 2;
}
else if (b[i] == 2) {
b[i] = 3;
}
else if (b[i] == 3) {
b[i] = 1;
}
}
else {
break;
}
}
}
signed ans = 0;
for (signed i = 1; i <= (n << 1); i++) {
if (a[i] - b[i] == -1 || a[i] == 3 && b[i] == 1) {
ans++;
}
else if (a[i] == b[i]) {
continue;
}
else {
ans--;
}
}
cout << ans << endl;
for (signed i = 1; i <= (n << 1); i++) {
cout << a[i] << " ";
}
cout << endl;
for (signed i = 1; i <= (n << 1); i++) {
cout << b[i] << " ";
}
cout << endl;
}
}
return 0;
}