#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;
}