implement part1