class_docstr: Properties
  ==========
  
  [1] `0 \in \Omega` and `\tau(1) = \epsilon`
  [2] `\alpha^x = \beta \Leftrightarrow \beta^{x^{-1}} = \alpha`
  [3] If `\alpha^x = \beta`, then `H \tau(\alpha)x = H \tau(\beta)`
  [4] `\forall \alpha \in \Omega, 1^{\tau(\alpha)} = \alpha`
  
  References
  ==========
  
  .. [1] Holt, D., Eick, B., O'Brien, E.
         "Handbook of Computational Group Theory"
  
  .. [2] John J. Cannon; Lucien A. Dimino; George Havas; Jane M. Watson
         Mathematics of Computation, Vol. 27, No. 123. (Jul., 1973), pp. 463-490.
         "Implementation and Analysis of the Todd-Coxeter Algorithm"
class_docstr_tok: ["Properties","==========","[","1","]","`","0","\\in","\\Omega","`","and","`","\\tau","(","1",")","=","\\epsilon","`","[","2","]","`","\\alpha^x","=","\\beta","\\Leftrightarrow","\\beta^","{","x^","{","-1","}","}","=","\\alpha","`","[","3","]","If","`","\\alpha^x","=","\\beta","`",",","then","`","H","\\tau","(","\\alpha",")","x","=","H","\\tau","(","\\beta",")","`","[","4","]","`","\\forall","\\alpha","\\in","\\Omega",",","1^","{","\\tau","(","\\alpha",")","}","=","\\alpha","`","References","==========","..","[","1","]","Holt",",","D.",",","Eick",",","B.",",","O'Brien",",","E.","``","Handbook","of","Computational","Group","Theory","''","..","[","2","]","John","J.","Cannon",";","Lucien","A.","Dimino",";","George","Havas",";","Jane","M.","Watson","Mathematics","of","Computation",",","Vol",".","27",",","No",".","123",".","(","Jul.",",","1973",")",",","pp",".","463-490",".","``","Implementation","and","Analysis","of","the","Todd-Coxeter","Algorithm","''"]
docstr: A modified version of ``scan`` routine, described on Pg. 165 second
  para. [1], with modification similar to that of ``scan_anf_fill`` the
  only difference being it calls the coincidence procedure used in the
  coset-table based method i.e. the routine ``coincidence_c`` is used.
  
  See Also
  ========
  
  scan, scan_and_fill
docstr_tok: ["A","modified","version","of","``","scan","``","routine",",","described","on","Pg",".","165","second","para",".","[","1","]",",","with","modification","similar","to","that","of","``","scan_anf_fill","``","the","only","difference","being","it","calls","the","coincidence","procedure","used","in","the","coset-table","based","method","i.e",".","the","routine","``","coincidence_c","``","is","used",".","See","Also","========","scan",",","scan_and_fill"]
code: def scan_and_fill_c(self, alpha, word):
      """
      A modified version of ``scan`` routine, described on Pg. 165 second
      para. [1], with modification similar to that of ``scan_anf_fill`` the
      only difference being it calls the coincidence procedure used in the
      coset-table based method i.e. the routine ``coincidence_c`` is used.
  
      See Also
      ========
  
      scan, scan_and_fill
  
      """
      A_dict = self.A_dict
      A_dict_inv = self.A_dict_inv
      table = self.table
      r = len(word)
      f = alpha
      i = 0
      b = alpha
      j = r - 1
      # loop until it has filled the alpha row in the table.
      while True:
          # do the forward scanning
          while i <= j and table[f][A_dict[word[i]]] is not None:
              f = table[f][A_dict[word[i]]]
              i += 1
          if i > j:
              if f != b:
                  self.coincidence_c(f, b)
              return
          # forward scan was incomplete, scan backwards
          while j >= i and table[b][A_dict_inv[word[j]]] is not None:
              b = table[b][A_dict_inv[word[j]]]
              j -= 1
          if j < i:
              self.coincidence_c(f, b)
          elif j == i:
              table[f][A_dict[word[i]]] = b
              table[b][A_dict_inv[word[i]]] = f
              self.deduction_stack.append((f, word[i]))
          else:
              self.define_c(f, word[i])
  
imports: from sympy.combinatorics.free_groups import free_group
  from sympy.printing.defaults import DefaultPrinting
  from itertools import chain, product
  from bisect import bisect_left
label_desc: Use image node_id 17 for calling the CosetTable obj's underlying member method code with example usage: obj.scan_and_fill_c(alpha, word) without return types