Порядок выполнения промисов и setTimeout

Medium
promisesevent-loopasynchronoussetTimeoutmicrotasksmacrotasksTinkoff

Расскажите в каком порядке отработают логи

setTimeout(() => console.log('C'), 0);

const promise = new Promise((resolve) => {
    console.log('P');
    resolve();
});

console.log('E');

promise.then(
    () => console.log('M'),
    () => console.log('H')
);

Примеры

Пример 1
Вход:
Execution order
Выход:
???
Ваш код - JavaScript
Результаты
Нажмите «Запуск» для выполнения кода