#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using P = pair<int, int>;
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma GCC optimize("Ofast")
constexpr ll INF = 1e18;
constexpr int inf = 1e9;
constexpr ll mod = 1000000007;
constexpr ll mod2 = 998244353;
const double PI = 3.1415926535897932384626433832795028841971;
const int dx[6] = {1, 0, -1, 0, 1, 1};
const int dy[6] = {0, 1, 0, -1, 1, -1};
template <class T>
inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  string a, b;
  cin >> a >> b;
  vector<int> from_l;
  int pos = 0;
  for (int i = 0; i < b.size(); i++) {
    while (pos < a.size() && a[pos] != b[i]) {
      pos++;
    }
    if (pos < a.size() && a[pos] == b[i]) {
      from_l.emplace_back(pos);
    }
    pos++;
  }
  reverse(b.begin(), b.end());
  vector<int> from_r;
  pos = a.size() - 1;
  for (int i = 0; i < b.size(); i++) {
    while (0 <= pos && a[pos] != b[i]) {
      pos--;
    }
    if (0 <= pos && a[pos] == b[i]) {
      from_r.emplace_back(pos);
    }
    pos--;
  }
  reverse(from_r.begin(), from_r.end());
  reverse(b.begin(), b.end());
  string ans = "";
  int N = b.size();
  ans = b.substr(N - from_r.size());
  string l = "";
  for (int i = 0; i < from_l.size(); i++) {
    l += b[i];
    int r_num = from_r.size() -
                (lower_bound(from_r.begin(), from_r.end(), from_l[i] + 1) -
                 from_r.begin());
    string r = b.substr(N - r_num);
    if ((l + r).size() >= b.size()) {
      ans = b;
      break;
    }
    if (ans.size() < (l + r).size()) {
      ans = l + r;
    }
  }
  if (ans.size() == 0) {
    cout << "-"
         << "\n";
  } else {
    cout << ans << "\n";
  }
  return 0;
}
