part one implemented