from itertools import product

def subsl(text, **literals):
	return map(
		''.join, product(*[map(str, literals.get(t, t)) for t in text])
	)

print(
	*subsl('x^2+2*x*y+y^2', x=(1,2,3), y=(5,6,7)),
	sep='\n'
)