code: def decipher(self,string):
                 
          ret = ''
          string = string.upper()
          rowseq,colseq = [],[]
          # take blocks of length period, reform rowseq,colseq from them
          for i in range(0,len(string),self.period):
              tempseq = []
              for j in range(0,self.period):
                  if i+j >= len(string): continue
                  tempseq.append(int(self.key.index(string[i + j]) / 5))
                  tempseq.append(int(self.key.index(string[i + j]) % 5))
              rowseq.extend(tempseq[0:int(len(tempseq)/2)])
              colseq.extend(tempseq[int(len(tempseq)/2):])
          for i in range(len(rowseq)):
              ret += self.key[rowseq[i]*5 + colseq[i]]
          return ret
docs: Decipher string using Bifid cipher according to initialised key. Punctuation and whitespace
          are removed from the input.
  
          Example::
  
              plaintext = Bifid('phqgmeaylnofdxkrcvszwbuti',5).decipher(ciphertext)     
  
          :param string: The string to decipher.
          :returns: The deciphered string.