def multiply(a, b, d): res = [0] * (d + 1) for i in range(d + 1): if a[i] == 0: continue for j in range(d + 1): if b[j] == 0: continue k = i + j if k > d: continue res[k] += a[i] * b[j] return res def derivative(poly, d): res = [0] * (d + 1) for i in range(1, d + 1): if i - 1 <= d: res[i - 1] = poly[i] * i return res def parse_expr(s, pos, d): terms = [parse_term(s, pos, d)] while pos[0] < len(s) and s[pos[0]] == '+': pos[0] += 1 terms.append(parse_term(s, pos, d)) res = [0] * (d + 1) for term in terms: for i in range(d + 1): res[i] += term[i] return res def parse_term(s, pos, d): factors = [parse_factor(s, pos, d)] while pos[0] < len(s) and s[pos[0]] == '*': pos[0] += 1 factors.append(parse_factor(s, pos, d)) res = factors[0] for factor in factors[1:]: res = multiply(res, factor, d) return res def parse_factor(s, pos, d): if s[pos[0]] == 'd': pos[0] += 1 if pos[0] >= len(s) or s[pos[0]] != '{': raise ValueError("Expected '{' after 'd'") pos[0] += 1 expr = parse_expr(s, pos, d) if pos[0] >= len(s) or s[pos[0]] != '}': raise ValueError("Expected '}' after expression") pos[0] += 1 return derivative(expr, d) elif s[pos[0]] == 'x': pos[0] += 1 res = [0] * (d + 1) if d >= 1: res[1] = 1 return res elif s[pos[0]].isdigit(): num = int(s[pos[0]]) pos[0] += 1 res = [0] * (d + 1) res[0] = num return res else: raise ValueError(f"Unexpected character: {s[pos[0]]}") def main(): import sys input = sys.stdin.read().split() N = int(input[0]) d = int(input[1]) S = input[2] pos = [0] poly = parse_expr(S, pos, d) print(' '.join(map(str, poly[:d + 1]))) if __name__ == "__main__": main()