I know that when somebody wants to run a function in a contract, she sends a transaction; and then a miner needs to run that function based on the function input received from the user, adding the contract output to a newly proposed block. The block is then propagated to every full-node to be verified, but
1- How can every full-node verify that every contract transaction is executed correctly by miners? Does the verifier receive the output of every contract in that block in addition to user input of the function; and then she has to run every contract and compare the result with the miner result? if so,
2- Verifying process is as expensive as mining, but why is still free (verifiers do not get any ether, unlike miners).
Simply, could anyone explain to me the mechanism in detail of verifying a block with contract transactions? What needs to be verified? how long does it take compared to mining a block?
Thanks