implemented merge_with
finished part 1