Programming Self-Assembly of DNA Tiles