#include <bits/stdc++.h>
using namespace std;
const int MAXn = 2100;
int dp[MAXn + 5], lng[MAXn + 5];
pair<int, pair<int, int> > par[MAXn + 5];
vector<int> d[2][MAXn + 2][MAXn + 2];
string s, t;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> s >> t;
  for (int i = 0; i < (int)s.size(); i++)
    if (s[i] == t[t.size() - 1]) {
      d[0][t.size() - 1][t.size() - 1].push_back(i);
      d[1][t.size() - 1][t.size() - 1].push_back(i);
      lng[t.size() - 1] = 1;
    }
  for (int i = (int)t.size() - 2; i >= 0; i--) {
    if (lng[i + 1] > 0)
      for (int j = i + lng[i + 1]; j > i; j--) {
        for (int k = 0; k < (int)d[0][i + 1][j].size(); k++)
          if (d[0][i + 1][j][k] - 1 >= 0 && s[d[0][i + 1][j][k] - 1] == t[i]) {
            d[0][i][j].push_back(d[0][i + 1][j][k] - 1);
            lng[i] = max(lng[i], j - i + 1);
          }
        for (int k = 0; k < (int)d[1][i + 1][j].size(); k++)
          if (d[1][i + 1][j][k] + 1 < (int)s.size() &&
              s[d[1][i + 1][j][k] + 1] == t[i]) {
            d[1][i][j].push_back(d[1][i + 1][j][k] + 1);
            lng[i] = max(lng[i], j - i + 1);
          }
      }
    for (int j = 0; j < (int)s.size(); j++)
      if (s[j] == t[i]) {
        if (j + 1 < (int)s.size()) {
          if (s[j + 1] != t[i + 1]) {
            d[0][i][i].push_back(j);
            lng[i] = max(lng[i], 1);
          }
        } else {
          d[0][i][i].push_back(j);
          lng[i] = max(lng[i], 1);
        }
        if (j - 1 >= 0) {
          if (s[j - 1] != t[i + 1]) {
            d[1][i][i].push_back(j);
            lng[i] = max(lng[i], 1);
          }
        } else {
          d[1][i][i].push_back(j);
          lng[i] = max(lng[i], 1);
        }
      }
  }
  dp[t.size()] = 0;
  for (int i = t.size() - 1; i >= 0; i--) {
    dp[i] = INT_MAX;
    if (lng[i] > 0)
      for (int j = i + lng[i]; j > i; j--)
        if (dp[j] != INT_MAX && dp[j] + 1 < dp[i]) {
          dp[i] = dp[j] + 1;
          par[i].first = j;
          if (d[0][i][i + lng[i] - 1].size() > 0)
            par[i].second = make_pair(d[0][i][i + lng[i] - 1][0],
                                      d[0][i][i + lng[i] - 1][0] + j - i - 1);
          else
            par[i].second = make_pair(d[1][i][i + lng[i] - 1][0],
                                      d[1][i][i + lng[i] - 1][0] - j + i + 1);
        }
  }
  if (dp[0] == INT_MAX)
    cout << -1 << endl;
  else {
    cout << dp[0] << endl;
    int pt = 0;
    while (pt < (int)t.size()) {
      cout << par[pt].second.first + 1 << " " << par[pt].second.second + 1
           << endl;
      pt = par[pt].first;
    }
  }
  return 0;
}
