Smith algorithm