'The third situation described in ``scan`` routine is handled by this
routine, described on Pg. 156-161 [1].
The unfortunate situation when the scan completes but not correctly,
then ``coincidence`` routine is run. i.e when for some `i` with
`1 \le i \le r+1`, we have `w=st` with `s=x_1*x_2 ... x_{i-1}`,
`t=x_i*x_{i+1} ... x_r`, and `\beta = \alpha^s` and
`\gamma = \alph^{t-1}` are defined but unequal. This means that
`\beta` and `\gamma` represent the same coset of `H` in `G`. Described
on Pg. 156 [1]. ``rep``
See Also
scan'

def coincidence(self, alpha, beta):

    A_dict = self.A_dict
    A_dict_inv = self.A_dict_inv
    table = self.table
    p = self.p
    l = 0
    q = []
    self.merge(alpha, beta, q)
    while (len(q) > 0):
        gamma = q.pop(0)
        for x in A_dict:
            delta = table[gamma][A_dict[x]]
            if (delta is not None):
                table[delta][A_dict_inv[x]] = None
                mu = self.rep(gamma)
                nu = self.rep(delta)
                if (table[mu][A_dict[x]] is not None):
                    self.merge(nu, table[mu][A_dict[x]], q)
                elif (table[nu][A_dict_inv[x]] is not None):
                    self.merge(mu, table[nu][A_dict_inv[x]], q)
                else:
                    table[mu][A_dict[x]] = nu
                    table[nu][A_dict_inv[x]] = mu
