#include<iostream>
#include<queue>
using namespace std;
const int N = 108;
int parent[N], degrees[N];
// parent[i]表示节点i的父节点
// degrees[i]表示节点i的度
// 插入一条边,从x到y
void insert(int x, int y) {
parent[y] = x;
}
// 找树根,统计度
int getRoot(int n) {
int k = 0;
for (int i = 1; i <= n; i++) {
if (parent[i] == 0) k = i; // 根节点的父亲是0
degrees[parent[i]]++;
}
return k;
}
// 找度最大的节点
int getMax(int n) {
int maxi = 0, deg = 0;
for (int i = 1; i <= n; i++)
if (degrees[i] > deg) {
deg = degrees[i];
maxi = i;
}
return maxi;
}
// 输出节点p的所有孩子
void printSons(int n, int p) {
for (int i = 1; i <= n; i++)
if (parent[i] == p) cout << i << " ";
}
int main() {
int n, m;
cin >> n >> m;
// 插入边
for (int i = 1; i <= m; i++) {
int x, y;
cin >> x >> y;
insert(x, y);
}
cout << getRoot(n) << endl;
int p = getMax(n);
cout << p << endl;
printSons(n, p);
return 0;
}