smith normal form