basic version

without any optimal