public void SynthethicModelStudy(string fileName)
        {
            // start from full configuration
            int fullLength = this.N;
            int[] input = new int[fullLength];
            for (int i = 0; i < fullLength; i++)
                input[i] = i;

            bool first = true;
            // for each possible length combination
            for (int l = 1; l <= fullLength; l++)
            {
                Combinations<int> combinations = new Combinations<int>(input, l);
                foreach (int[] combination in combinations)
                {
                    // copy of the full configuration
                    LineSegmentConfiguration c = new LineSegmentConfiguration(this);

                    // find the complement set
                    List<int> complement = new List<int>(input);
                    for (int i = 0; i < l; i++)
                        complement.Remove(combination[i]);

                    // get the configuration according the combination
                    for (int i = 0; i < fullLength - l; i++)
                        c.RemoveAtIndex(complement[i]);

                    // calculate Up, Ud, U an H of the current configuration
                    c.CalculateUP();
                    c.CalculateUD();
                    c.CalculateU();
                    c.CalculateH();

                    // output line segment details
                    if (first)
                    {
                        first = false;
                        c.WriteDebugDetails(fileName);
                    }
                    else
                    {
                        c.WriteDebugDetails(fileName, FileMode.Append, FileAccess.Write);
                    }
                }
            }
        }