#include <bits/stdc++.h>
using namespace std;
const int N = 3005;
const int INF = 1e8;
vector<int> g[N];
int dist[N][N];
int b[N][3], br[N][3], bn[N][3], brn[N][3];
int n, m;
void bfs(int v) {
  for (int i = 0; i < n; i++) dist[v][i] = INF;
  dist[v][v] = 0;
  queue<int> q;
  q.push(v);
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    for (int i = 0; i < g[u].size(); i++) {
      int to = g[u][i];
      if (dist[v][to] > dist[v][u] + 1) {
        dist[v][to] = dist[v][u] + 1;
        q.push(to);
      }
    }
  }
  for (int i = 0; i < n; i++) {
    if (dist[v][i] == INF) dist[v][i] = -INF;
  }
}
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    g[a - 1].push_back(b - 1);
  }
  for (int i = 0; i < n; i++) {
    bfs(i);
    for (int j = 0; j < 3; j++) b[i][j] = br[i][j] = -INF;
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (i == j) continue;
      if (i == 7 && j == 6) {
        int qq = 1;
      }
      int val = dist[i][j];
      for (int k = 0; k < 3; k++) {
        if (val > b[i][k]) {
          for (int tk = 2; tk > k; tk--) {
            b[i][tk] = b[i][tk - 1];
            bn[i][tk] = bn[i][tk - 1];
          }
          b[i][k] = val;
          bn[i][k] = j;
          break;
        }
      }
      for (int k = 0; k < 3; k++) {
        if (val > br[j][k]) {
          for (int tk = 2; tk > k; tk--) {
            br[j][tk] = br[j][tk - 1];
            brn[j][tk] = brn[j][tk - 1];
          }
          br[j][k] = val;
          brn[j][k] = i;
          break;
        }
      }
    }
  }
  int ans = -INF;
  int a, b, c, d;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (i == j) continue;
      if (i == 0 && j == 7) {
        int qq = 1;
      }
      for (int ik = 0; ik < 3; ik++) {
        for (int jk = 0; jk < 3; jk++) {
          int ta = brn[i][ik], tb = i, tc = j, td = bn[j][jk];
          if (ta == tb || ta == tc || ta == td || tb == td || tc == td)
            continue;
          int tans = dist[ta][tb] + dist[tb][tc] + dist[tc][td];
          if (tans > ans) {
            ans = tans;
            a = ta;
            b = tb;
            c = tc;
            d = td;
          }
        }
      }
    }
  }
  printf("%d %d %d %d", a + 1, b + 1, c + 1, d + 1);
  return 0;
}
