hw complete (attempt at least