find out efficient algorithm