Metaprogramming, require string input at first