class Fibo:
    def __init__(self,n,orig = True):
        self.orig = orig
        self.table = [1,1]
        
        if self.orig:
            self.n = n
            k = 1
            while max(self.table) <= self.n:
                self.table.append( self.table[k-1] + self.table[k] )
                k += 1
            self.table.pop()
        else:
            self.n = str(n)
            self.longueur = len( self.n ) - 2
            for i in range( self.longueur ):
                self.table.append(self.table[i] + self.table[i+1])
            self.table = self.table[1:]
            
    def codage(self):
        if self.orig:
            s = 0
            F = [1]
            for i in range(1, len(self.table) ):
                if s + self.table[-i] <= self.n:
                    F.append(1)
                    s += self.table[-i]
                else:
                    F.append(0)
            F.reverse()
            
            return ''.join([str(_) for _ in F])
        else:
            return None
    
    def decodage(self):
        if self.orig == False:
            s = 0
            for i in range(len(self.n)-1):
                if self.n[i] == '1': s += self.table[i]
                
            return s
        else:
            return None
        
    
"""f = Fibo(10001010011,orig=False)
print( f.decodage() )

g = Fibo( f.decodage() )
print( g.codage() )"""

"""
Message à coder
"""

message = "MASIUXUS EST NATHAN"
r = ""

for c in message:
    r += Fibo( ord(c) ).codage()

print(r)

"""
Message à décoder
"""

"""
code = '1010100011000100011101010000110001001001110010010011001010110100010001100001000011100101000111001010001101010010011010010000110010010001100000010011000010000110000001001110010010011001010110100100001110101000011001010110010001001101010010011101010000110010101110010100011000100011100000100110000001001100101011010000100111010100001101010010011100100100110010101100000100011000010000110010010001110100010011101010000110010101110101011'
r = ''

while len(code) !=0 :
    p = code.find('11')
    r += chr( Fibo(code[:(p+2)] , orig=False).decodage() )
    code = code[(p+2):]
    
print( r )
"""
    