#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3010;
int n, m;
set<int> G[MAXN];
int dst[MAXN][MAXN];
pair<int, int> ord[MAXN][MAXN];
pair<int, int> ord2[MAXN][MAXN];
void bfs(int s, int *dst) {
  for (int i = (0); i < (n); i++) dst[i] = -1;
  dst[s] = 0;
  queue<int> q;
  q.push(s);
  while (((int)q.size())) {
    int v = q.front();
    q.pop();
    for (auto it = G[v].begin(); it != G[v].end(); ++it) {
      if (dst[*it] == -1) {
        dst[*it] = dst[v] + 1;
        q.push(*it);
      }
    }
  }
}
int dp[4][MAXN];
int fp[4][MAXN];
int best(int src, int n1, int n2, int n3) {
  int r = n - 1;
  while (r >= 0 && (ord[src][r].second == src || ord[src][r].second == n1 ||
                    ord[src][r].second == n2 || ord[src][r].second == n3))
    r--;
  if (r < 0) return -1;
  return ord[src][r].second;
}
int best2(int dst, int n1, int n2, int n3) {
  int r = n - 1;
  while (r >= 0 && (ord2[dst][r].second == dst || ord2[dst][r].second == n1 ||
                    ord2[dst][r].second == n2 || ord2[dst][r].second == n3))
    r--;
  if (r < 0) return -1;
  return ord2[dst][r].second;
}
int a, b, c, d;
int RES = -1;
void test(int A, int B, int C, int D) {
  if (A == -1 || B == -1 || C == -1 || D == -1) return;
  if (dst[A][B] == -1 || dst[B][C] == -1 || dst[C][D] == -1) return;
  int r = dst[A][B] + dst[B][C] + dst[C][D];
  if (r > RES) {
    RES = r;
    b = B;
    a = A, c = C;
    d = D;
  }
}
int main() {
  ios::sync_with_stdio(0);
  while (cin >> n >> m) {
    for (int i = (0); i < (m); i++) {
      int u, v;
      cin >> u >> v;
      u--, v--;
      if (u != v) G[u].insert(v);
    }
    for (int i = (0); i < (n); i++) bfs(i, dst[i]);
    for (int i = (0); i < (n); i++)
      for (int j = (0); j < (n); j++) ord[i][j] = pair<int, int>(dst[i][j], j);
    for (int i = (0); i < (n); i++)
      for (int j = (0); j < (n); j++) ord2[i][j] = pair<int, int>(dst[j][i], j);
    for (int i = (0); i < (n); i++) sort(ord[i], ord[i] + n);
    for (int i = (0); i < (n); i++) sort(ord2[i], ord2[i] + n);
    RES = -1;
    for (int i = (0); i < (n); i++) {
      for (int j = (0); j < (n); j++)
        if (i != j) {
          int x;
          x = best2(i, j, -1, -1);
          test(x, i, j, best(j, i, x, -1));
          x = best(j, i, -1, -1);
          test(best2(i, j, x, -1), i, j, x);
        }
    }
    cout << a + 1 << ' ' << b + 1 << ' ' << c + 1 << ' ' << d + 1 << endl;
  }
  return 0;
}
