problem definition --begin