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: Runtime Error)

//by xxj
//I love 7 sea k fall
#include<bits/stdc++.h>
using namespace std;
#define fst first
#define snd second
#define mp make_pair
#define ll long long
#define pii pair<int,int>
#define lowbit(x) x&-x
const int inf=1e9+7;
const double eps=1e-10;
const ll linf=1e18+7;
const ll hh=523;
//const int mod=;
inline int read(){
    int x=0;char ch=getchar();
    while(ch<'0'||ch>'9')ch=getchar();
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x;
}
string s1,s,t;
bool canbe[2000007];
int nxt[500007];
void find_nxt(){
	string q=t;
	q+='$';
	int i=0,j=-1;
	nxt[i]=j;
	while (i!=q.size()-1){
		if (j==-1 || q[i]==q[j]){
			if (q[++i]==q[++j]){
				nxt[i]=nxt[j];
			}
			else{
				nxt[i]=j;
			}
		}
		else{
			j=nxt[j];
		}
	}
//	for (int i=0;i<q.size();i++){
//		cout<<i<<' '<<nxt[i]<<endl;
//	}
}
int main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	cin>>s1>>t;
	s=s1;
	while (s.size()<t.size()){
		s+=s1;
	}
	s1=s; 
	s+=s1;
//	cout<<s<<' '<<s1<<endl;
	find_nxt();
//	puts("!!!!");
	int j=0;
	for (int i=0;i<s.size();i++){
//		cout<<i<<' '<<nxt[j]<<endl;
		while (j!=-1 && t[j]!=s[i]){
			j=nxt[j];
		}
//		cout<<i<<endl;
//		cout<<i<<' '<<j<<endl;
		j++;
//		cout<<i<<' '<<j<<endl;
		if (j==t.size()){
			canbe[i-t.size()+1]=true;
//			cout<<i-t.size()+1<<endl;
			j=nxt[j];
		}
	}
//	puts("");
	int ans=0,mx=0;
	int cnt=0;
	for (int i=0;i<s.size();i++){
		cnt=0;
		while (canbe[i]){
			cnt++;
			i=i+t.size(); 
		}
		ans=max(ans,cnt);
	}
	if (!ans){
		printf("%d\n",ans);
		return 0;
	}
	s+=s1;
	j=0;
	for (int i=0;i<s.size();i++){
//		cout<<i<<' '<<nxt[j]<<endl;
		while (j!=-1 && t[j]!=s[i]){
			j=nxt[j];
		}
//		cout<<i<<endl;
//		cout<<i<<' '<<j<<endl;
		j++;
//		cout<<i<<' '<<j<<endl;
		if (j==t.size()){
			canbe[i-t.size()+1]=true;
//			cout<<i-t.size()+1<<endl;
			j=nxt[j];
		}
	}
	for (int i=0;i<s.size();i++){
		cnt=0;
		while (canbe[i]){
			cnt++;
			i=i+t.size(); 
		}
		mx=max(mx,cnt);
	}
	if (mx>ans){
		puts("-1");
	}
	else{
		printf("%d\n",ans);
	}
	return 0;
}
/*
input:
*/