← Home
package main

import (
	"fmt"
	"strings"
)

func main() {
	var b, d int
	if _, err := fmt.Scan(&b, &d); err != nil {
		return
	}
	var a, c string
	if _, err := fmt.Scan(&a, &c); err != nil {
		return
	}

	for i := 0; i < len(c); i++ {
		if !strings.Contains(a, string(c[i])) {
			fmt.Println(0)
			return
		}
	}

	lenAdded := make([]int, len(a))
	for i := 0; i < len(a); i++ {
		curr := i
		added := 0
		for j := 0; j < len(c); j++ {
			for a[curr] != c[j] {
				curr = (curr + 1) % len(a)
				added++
			}
			curr = (curr + 1) % len(a)
			added++
		}
		lenAdded[i] = added
	}

	visited := make([]int, len(a))
	matchCountAt := make([]int, len(a))
	lenAt := make([]int, len(a))
	for i := range visited {
		visited[i] = -1
	}

	curr := 0
	matches := 0
	totalLen := 0
	maxLen := b * len(a)

	for {
		if visited[curr] != -1 {
			cycleMatches := matches - matchCountAt[curr]
			cycleLen := totalLen - lenAt[curr]

			if cycleLen > 0 {
				remLen := maxLen - totalLen
				numCycles := remLen / cycleLen
				matches += numCycles * cycleMatches
				totalLen += numCycles * cycleLen
			}

			for i := range visited {
				visited[i] = -1
			}
		}

		visited[curr] = matches
		matchCountAt[curr] = matches
		lenAt[curr] = totalLen

		if totalLen+lenAdded[curr] <= maxLen {
			totalLen += lenAdded[curr]
			curr = (curr + lenAdded[curr]) % len(a)
			matches++
		} else {
			break
		}
	}

	fmt.Println(matches / d)
}