works for a large number