Let s be a string whose length equals n. Its characters are numbered from 0 to n - 1, i and j are integers, 0 ≤ i < j < n. Let's define function f as follows:

f(s, i, j) = s[i + 1... j - 1] + r(s[j... n - 1]) + r(s[0... i]).

Here s[p... q] is a substring of string s, that starts in position p and ends in position q (inclusive); "+" is the string concatenation operator; r(x) is a string resulting from writing the characters of the x string in the reverse order. If j = i + 1, then the substring s[i + 1... j - 1] is considered empty.

You are given two strings a and b. Find such values of i and j, that f(a, i, j) = b. Number i should be maximally possible. If for this i there exists several valid values of j, choose the minimal j.

Input

The first two input lines are non-empty strings a and b correspondingly. Each string's length does not exceed 106 characters. The strings can contain any characters with ASCII codes from 32 to 126 inclusive.

Output

Print two integers i, j — the answer to the problem. If no solution exists, print "-1 -1" (without the quotes).

Examples

Input

Die Polizei untersucht eine Straftat im IT-Bereich.
untersucht eine Straftat.hciereB-TI mi  ieziloP eiD


Output

11 36


Input

cbaaaa
aaaabc


Output

4 5


Input

123342
3324212


Output

-1 -1
#include <bits/stdc++.h>
using namespace std;
const int prime = 37;
const int maxn = 1100000;
char a[maxn], b[maxn];
int ha[maxn], hb[maxn], hc[maxn], pp[maxn];
int ll[maxn], rr[maxn];
int n;
int main() {
  gets(a);
  gets(b);
  n = strlen(a);
  if (n != (int)strlen(b) || n <= 1) {
    puts("-1 -1");
    return 0;
  }
  pp[0] = 1;
  ha[0] = 0;
  hb[0] = 0;
  hc[n] = 0;
  for (int i = 0; i < (n); ++i) {
    pp[i + 1] = pp[i] * prime;
    ha[i + 1] = ha[i] * prime + a[i];
    hb[i + 1] = hb[i] * prime + b[i];
    hc[n - i - 1] = hc[n - i] * prime + a[n - i - 1];
  }
  for (int i = 0; i < (n); ++i) {
    int st = 0, ed = n - i;
    while (st <= ed) {
      int mi = (st + ed) >> 1;
      if (hc[n - mi] == hb[i + mi] - hb[i] * pp[mi])
        st = mi + 1;
      else
        ed = mi - 1;
    }
    rr[i] = ed;
  }
  for (int i = 0, j = 0; i < n; i++) {
    while (j < rr[i] + i) {
      ll[j] = i;
      j++;
    }
  }
  int pi = -1, pj = -1;
  for (int i = 0; i < (n - 1); ++i) {
    if (a[i] != b[n - i - 1]) break;
    int z = ll[n - i - 2];
    if (z > n - i - 2) continue;
    if (ha[i + z + 1] - ha[i + 1] * pp[z] == hb[z]) {
      pi = i;
      pj = i + z + 1;
    }
  }
  printf("%d %d\n", pi, pj);
  return 0;
}
