vector<int> NGE(vector<int> v) {  // O(2N) at worst possible case
  int n = v.size();
  vector<int> nge(n);
  stack<int> st;
  for (int i = n - 1; i >= 0; i--) {
    while (!st.empty() && st.top() <= v[i]) {
      st.pop();
    }
    if (st.empty()) {
      nge[i] = -1;
    } else {
      nge[i] = st.top();
    }
    st.push(v[i]);
  }
}