#include <iostream>
#include <set>
#include <vector>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m;
cin >> n >> m;
set<int> anya, borya;
// Читаем цвета Ани (set автоматически удалит дубликаты и отсортирует)
for (int i = 0; i < n; i++) {
int color;
cin >> color;
anya.insert(color);
}
// Читаем цвета Бори
for (int i = 0; i < m; i++) {
int color;
cin >> color;
borya.insert(color);
}
// 1. Пересечение (цвета в обоих наборах)
vector<int> intersection;
for (int color : anya) {
if (borya.count(color)) { // Проверка наличия в set Бори
intersection.push_back(color);
}
}
// 2. Только у Ани (разность множеств A - B)
vector<int> only_anya;
for (int color : anya) {
if (!borya.count(color)) {
only_anya.push_back(color);
}
}
// 3. Только у Бори (разность множеств B - A)
vector<int> only_borya;
for (int color : borya) {
if (!anya.count(color)) {
only_borya.push_back(color);
}
}
// Вывод результата
// Пересечение
cout << intersection.size() << "\n";
for (int color : intersection) {
cout << color << " ";
}
cout << "\n";
// Только у Ани
cout << only_anya.size() << "\n";
for (int color : only_anya) {
cout << color << " ";
}
cout << "\n";
// Только у Бори
cout << only_borya.size() << "\n";
for (int color : only_borya) {
cout << color << " ";
}
cout << "\n";
return 0;
}