product создает список кортежей из тех символов и длины, что ты передал.
То есть words хранит в себе [('c', 'c', 'c', 'c', 'c'

, ('c', 'c', 'c', 'c', в'

и тд] хранит все комбинации из этих букв размером 5 символов,
а когда ты проходишься в цикле по этому списку, ты переменной w присваиваешь сначала кортеж с нулевым индексом, в следующей итерации цикла w равняется кортежу с 1м индексом и так далее, пока по все кортежи не охватишь. Потом ты соединяешь кортеж в строку, то есть из ('с', 'c', 'c', 'c', 'c'

строка w = ''.join(w) создает строку 'ccccc', хоть в этой задаче это вовсе не обязательно. Надеюсь, что помог.