private static void Permutations(List<string> vars, processorFunc func)
        {
            var dict = new Dictionary<string, bool>();
            foreach (string name in vars)
                dict.Add(name, false);

            Permutations(0, vars, dict, func);
        }
        private static void Permutations(List <string> vars, processorFunc func)
        {
            var dict = new Dictionary <string, bool>();

            foreach (string name in vars)
            {
                dict.Add(name, false);
            }

            Permutations(0, vars, dict, func);
        }
        private static void Permutations(int index, List<string> vars, Dictionary<string, bool> vals, processorFunc func)
        {
            for ( int b = 0; b <= 1; b++ )
            {
                vals[vars[index]] = ( b == 1 );

                if (index < vars.Count - 1)
                    Permutations(index + 1, vars, vals, func);
                else
                    func(vals);
            }
        }
        private static void Permutations(int index, List <string> vars, Dictionary <string, bool> vals, processorFunc func)
        {
            for (int b = 0; b <= 1; b++)
            {
                vals[vars[index]] = (b == 1);

                if (index < vars.Count - 1)
                {
                    Permutations(index + 1, vars, vals, func);
                }
                else
                {
                    func(vals);
                }
            }
        }