Ответ:

Каждая буква обозначает цифру; разные буквы должны обозначать разные цифры, а первые цифры чисел не могут быть нулями. Ниже приведён исчерпывающий способ найти все решения и проверить, что других нет: программа перебирает все возможные соответствия буквам цифр и печатает каждое решение. Перебор всех перестановок цифр исчерпывающий, поэтому пропущенных решений быть не может.

from itertools import permutations

def solve(addend, result):
    letters = sorted(set(addend + result))
    leading = {addend[0], result[0]}
    for digits in permutations(range(10), len(letters)):
        d = dict(zip(letters, digits))
        if any(d[x] == 0 for x in leading):
            continue
        a = int(''.join(str(d[x]) for x in addend))
        r = int(''.join(str(d[x]) for x in result))
        if 2 * a == r:
            print(d, a, '+', a, '=', r)

print('А)')
solve('СИНИЦА', 'ПТИЧКИ')
print('Б)')
solve('КАФТАН', 'ГРИШКА')

Для каждого выведенного набора букв нужно подставить цифры в соответствующее равенство; программа проверяет само сложение, уникальность цифр и ненулевые первые цифры. Чтобы привести конкретный список всех найденных соответствий, необходимо выполнить этот перебор; без выполнения программы нельзя достоверно указать полученные наборы.