#include <iostream>
#include <utility>
#include <list>
#include <set>
#include <iterator>
#include <algorithm>
#include <map>
//количество вершин
uint N;
//количество ребер
uint K;
//список ребер
std::set<std::set<uint>> friend_groups;
std::set<std::set<uint>> friend_groups_next;
//decltype(friend_groups) friend_groups_next;
//карта вершин, ключ - номер вершины, значение - множество соседних вершин
std::map<uint, std::set<uint>> verts;
//
void input(){
//прочитать количество вершин
std::cin >> N;
//прочитать количество ребер
std::cin >> K;
//для каждой вершины
for (uint i=1; i<=N; ++i){
//создать пустое множество соседей, потом заполним
verts.insert({i, {}});
}
//для каждого ребра
for (uint i=0; i<K; ++i){
uint v1, v2;
//прочитать пару вершин
std::cin >> v1 >> v2;
//добавить вершину v2 в множество соседей вершины v1
verts[v1].insert(v2);
//добавить вершину v1 в множество соседей вершины v2
verts[v2].insert(v1);
//добавить ребро в список
friend_groups.insert({v1, v2});
}
}
//укрупнить группки друзей
void enlarge_friend_groups(){
for (const auto &friend_group: friend_groups) {
//соседние вершины подграфа
std::set<uint> neighbors;
//объединить множества соседей вершин для каждой вершины в дружеской группе
for (auto it= friend_group.begin(); it != friend_group.end(); ++it){
const int &v = *it;
const std::set<uint> &n = verts[v];
neighbors.insert(n.begin(), n.end());
}
//вычесть саму дружескую группу - образовать множество вершин-соседей с кучкой друзей
for (uint v: friend_group) {
neighbors.erase(v);
}
//пройтись по соседям
for (uint neighbor: neighbors) {
if (std::all_of(friend_group.begin(), friend_group.end(), [neighbor, &friend_group](uint v){ return verts[neighbor].find(v) != verts[neighbor].end(); /*verts[v].find(neighbor) != friend_group.end();*/ }))
{
std::set<uint> friend_group_next{neighbor};
friend_group_next.insert(friend_group.begin(), friend_group.end());
friend_groups_next.insert(std::move(friend_group_next));
}
}
}
}
int main()
{
input();
//пытаться увеличивать группы друзей на вершину до тех пор, пока это удается
//начинаем со списка ребер, как с наименьшего набора групп друзей - пар
do {
friend_groups_next.clear();
enlarge_friend_groups();
std::swap(friend_groups, friend_groups_next);
} while (!friend_groups.empty());
const std::set<uint> &result_group = *(friend_groups_next.begin());
std::cout << result_group.size() << std::endl;
std::copy(result_group.begin(), std::prev(result_group.end()), std::ostream_iterator<uint>(std::cout, " "));
std::cout << *(std::prev(result_group.end())) << std::endl;
return 0;
}