# python3 import random def read_input(): return (input().rstrip(), input().rstrip()) def print_occurrences(output): print(' '.join(map(str, output))) def get_occurrences(pattern, text): return [ i for i in range(len(text) - len(pattern) + 1) if text[i:i + len(pattern)] == pattern ] def poly_hash(S, p, x): ans = 0 for c in reversed(S): ans = (ans * x + ord(c)) % p return ans def pre_compute_hashes(T, pattenLength, p, x): H = [0] * (len(T) - pattenLength + 1) S = T[len(T) - pattenLength:] H[len(T) - pattenLength] = poly_hash(S, p, x) y = 1 for _ in range(pattenLength): y = (y * x) % p for i in reversed(range(len(T) - pattenLength)): H[i] = (x * H[i + 1] + ord(T[i]) - y * ord(T[i + pattenLength])) % p return H def rabin_karp(P, T): p = 1000000007 x = random.randint(1, 1000000006) positions = [] pHash = poly_hash(P, p, x) H = pre_compute_hashes(T, len(P), p, x) for i in range(len(T) - len(P) + 1): if pHash != H[i]: continue if T[i:i + len(P)] == P: positions.append(i) return positions if __name__ == '__main__': print_occurrences(rabin_karp(*read_input()))