Synchronization and decomposition of finite automata