parameters: (self, S)
return_statement: return ["({}, {})".format(*cand)
                  for i in xrange(1, len(S)-2)
                  for cand in itertools.product(make(S, 1, i),
                                                make(S, i+1, len(S)-2-i))]
docstring: :type S: str
          :rtype: List[str]
docstring_summary: :type S: str
          :rtype: List[str]
docstring_tokens: : type S : str : rtype : List [ str ]
function: def ambiguousCoordinates(self, S):
          """
          :type S: str
          :rtype: List[str]
          """
          def make(S, i, n):
              for d in xrange(1, n+1):
                  left = S[i:i+d]
                  right = S[i+d:i+n]
                  if ((not left.startswith('0') or left == '0')
                          and (not right.endswith('0'))):
                      yield "".join([left, '.' if right else '', right])
  
          return ["({}, {})".format(*cand)
                  for i in xrange(1, len(S)-2)
                  for cand in itertools.product(make(S, 1, i),
                                                make(S, i+1, len(S)-2-i))]
function_tokens: def ambiguousCoordinates ( self , S ) : def make ( S , i , n ) : for d in xrange ( 1 , n + 1 ) : left = S [ i : i + d ] right = S [ i + d : i + n ] if ( ( not left . startswith ( '0' ) or left == '0' ) and ( not right . endswith ( '0' ) ) ) : yield "" . join ( [ left , '.' if right else '' , right ] ) return [ "({}, {})" . format ( * cand ) for i in xrange ( 1 , len ( S ) - 2 ) for cand in itertools . product ( make ( S , 1 , i ) , make ( S , i + 1 , len ( S ) - 2 - i ) ) ]