#include #define For(i, a, b) for(int (i)=(int)(a); (i)<(int)(b); ++(i)) #define rFor(i, a, b) for(int (i)=(int)(a)-1; (i)>=(int)(b); --(i)) #define rep(i, n) For((i), 0, (n)) #define rrep(i, n) rFor((i), (n), 0) #define fi first #define se second using namespace std; typedef long long lint; typedef unsigned long long ulint; typedef pair pii; typedef pair pll; template bool chmax(T &a, const T &b){if(a bool chmin(T &a, const T &b){if(a>b){a=b; return true;} return false;} template T div_floor(T a, T b){ if(b < 0) a *= -1, b *= -1; return a>=0 ? a/b : (a+1)/b-1; } template T div_ceil(T a, T b){ if(b < 0) a *= -1, b *= -1; return a>0 ? (a-1)/b+1 : a/b; } constexpr lint mod = 1e9+7; constexpr lint INF = mod * mod; constexpr int MAX = 100010; vector Z_algorithm(string &s){ int n = s.size(); vector z(n); z[0] = n; int i = 1, j = 0; while(i < n){ while(i+j < n && s[j] == s[i+j]) ++j; z[i] = j; if(j == 0){ ++i; continue; } int k = 1; while(i+k < n && k+z[k] < j) z[i+k] = z[k], ++k; i += k; j -= k; } return z; } int main(){ string s, t; cin >> s >> t; if(t.size() == 1){ rep(i, s.size())if(s[i] == t[0]){ puts("-1"); return 0; } printf("%d\n", 0); } else{ int n = s.size(), m = t.size(); t += s; auto z = Z_algorithm(t); int i = m, ans = 0; while(i < n+m){ if(z[i] >= m) ++ans, i += m-1; else ++i; } printf("%d\n", ans); } }