An Efficient Approach to Multi-layer Layer Assignment with Application to Via Minimization