metaprogramming assignment