Problem:
Score : 600 points

Problem Statement

Given are two strings s and t consisting of lowercase English letters. Determine if the number of non-negative integers i satisfying the following condition is finite, and find the maximum value of such i if the number is finite.

There exists a non-negative integer j such that the concatenation of i copies of t is a substring of the concatenation of j copies of s.

Notes

A string a is a substring of another string b if and only if there exists an integer x (0 \leq x \leq |b| - |a|) such that, for any y (1 \leq y \leq |a|), a_y = b_{x+y} holds.

We assume that the concatenation of zero copies of any string is the empty string. From the definition above, the empty string is a substring of any string. Thus, for any two strings s and t, i = 0 satisfies the condition in the problem statement.

Constraints

1 \leq |s| \leq 5 \times 10^5

1 \leq |t| \leq 5 \times 10^5

s and t consist of lowercase English letters.

Input

Input is given from Standard Input in the following format:

s
t

Output

If the number of non-negative integers i satisfying the following condition is finite, print the maximum value of such i; if the number is infinite, print -1.

Sample Input 1

abcabab
ab

Sample Output 1

3

The concatenation of three copies of t, ababab, is a substring of the concatenation of two copies of s, abcabababcabab, so i = 3 satisfies the condition.

On the other hand, the concatenation of four copies of t, abababab, is not a substring of the concatenation of any number of copies of s, so i = 4 does not satisfy the condition.

Similarly, any integer greater than 4 does not satisfy the condition, either. Thus, the number of non-negative integers i satisfying the condition is finite, and the maximum value of such i is 3.

Sample Input 2

aa
aaaaaaa

Sample Output 2

-1

For any non-negative integer i, the concatenation of i copies of t is a substring of the concatenation of 4i copies of s. Thus, there are infinitely many non-negative integers i that satisfy the condition.

Sample Input 3

aba
baaab

Sample Output 3

0

As stated in Notes, i = 0 always satisfies the condition.

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

/// However long the night,
///     The dawn will break
/// ICPC next year

#include <bits/stdc++.h>
using namespace std;

const int N = 2e6+5 ;

int n ,m ;
char pat[N], str[N];
int F[N] ,to[N] ;
bool is[N] ,vis[N] ;

int getNextLen(int len, char c){
  while(len && c != pat[len])
    len = F[len-1];
  if(c == pat[len]) ++len;
  return len;
}

void computeF(){
  for(int i = 1 ; pat[i] ; ++i)
    F[i] = getNextLen(F[i-1], pat[i]);
}

vector<int> search(){
  int len = 0;
  vector<int> res;
  for(int i = 0 ; str[i] ; ++i){
    len = getNextLen(len, str[i]);
    if(!pat[len]) res.push_back(i-len+1);
  }
  return res;
}
long long dfs(int i){
    if(to[i]==-1) return 0;
    if(vis[i]){
        cout << -1 ;
        exit(0) ;
    }
    vis[i] = 1 ;
    return dfs((to[i]+1)%n) + to[i]-i+1 ;
}
int main(){
    scanf("%s %s", str, pat);
    m = strlen(pat);
    n = strlen(str) ;
    while(n<m){
        for(int i=n;i<n+n;++i) str[i] = str[i-n] ;
        n += n;
    }
    ///for(int i=n;i<n+n;++i) str[i] = str[i-n] ;
    ///n += n;
    for(int i=0;i+1<m;++i) str[n+i] = str[i] ;
    str[n+m] = '\0' ;
    //cout << m << endl ;
    //cout << str << endl << pat << endl ;
    computeF();
    vector<int> sub = search();
    memset(to,-1,sizeof to);
    for(int x : sub) to[x] = x + m - 1 ;
    for(int i=n-1;i-m>=0;--i) if(~to[i-m] && ~to[i]) to[i-m] = to[i] ;

    str[n] = '\0' ;
    long long ans = 0 ;
    for(int i=0;i<n;++i){
        if(to[i]==-1) continue ;
        if(vis[i]) continue ;
        ans = max(ans,dfs(i)/m);
    }
    cout << ans << endl ;
    return 0;
}