Novel Coding Strategies For Multi-Level Non-Volatile Memories