#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n, m, dista[3010][3010], distb[3010][3010];
vector<int> a[3010], b[3010];
bool used[3010];
set<pair<int, int>> maxa[3010], maxb[3010];
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    int frm, to;
    cin >> frm >> to;
    a[frm].push_back(to);
    b[to].push_back(frm);
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      dista[i][j] = 1e9;
      distb[i][j] = 1e9;
    }
  }
  for (int i = 1; i <= n; i++) {
    queue<int> q;
    for (int j = 1; j <= n; j++) {
      used[j] = 0;
    }
    q.push(i);
    used[i] = true;
    dista[i][i] = 0;
    while (!q.empty()) {
      int cur = q.front();
      q.pop();
      for (int j = 0; j < a[cur].size(); j++) {
        int chi = a[cur][j];
        if (used[chi] == false) {
          q.push(chi);
          used[chi] = true;
          dista[i][chi] = dista[i][cur] + 1;
        }
      }
    }
    for (int j = 1; j <= n; j++) {
      if (dista[i][j] != 1e9) {
        maxa[i].insert({dista[i][j], j});
      }
      if (maxa[i].size() > 3) {
        maxa[i].erase(maxa[i].begin());
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    queue<int> q;
    for (int j = 1; j <= n; j++) {
      used[j] = false;
    }
    q.push(i);
    used[i] = true;
    distb[i][i] = 0;
    while (!q.empty()) {
      int cur = q.front();
      q.pop();
      for (int j = 0; j < b[cur].size(); j++) {
        int chi = b[cur][j];
        if (used[chi] == false) {
          q.push(chi);
          used[chi] = true;
          distb[i][chi] = distb[i][cur] + 1;
        }
      }
    }
    for (int j = 1; j <= n; j++) {
      if (distb[i][j] != 1e9) {
        maxb[i].insert({distb[i][j], j});
      }
      if (maxb[i].size() > 3) {
        maxb[i].erase(maxb[i].begin());
      }
    }
  }
  int sum = 0;
  vector<int> ans;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      if (i != j && dista[i][j] != 1e9) {
        for (auto it : maxa[j]) {
          if (it.second != i && it.second != j) {
            for (auto jt : maxb[i]) {
              if (jt.second != i && jt.second != j && jt.second != it.second) {
                int sumt = dista[i][j] + it.first + jt.first;
                if (sumt > sum) {
                  sum = sumt;
                  ans.clear();
                  ans.push_back(jt.second);
                  ans.push_back(i);
                  ans.push_back(j);
                  ans.push_back(it.second);
                }
              }
            }
          }
        }
      }
    }
  }
  for (int i = 0; i < ans.size(); i++) {
    cout << ans[i] << " ";
  }
}
