better constructor with better test cases
add data structure