def powM(M, n):
  if n == 0:
    return (1, 0, 0, 1)
  else:
    S = powM(M, n // 2)
    S2 = matmul(S, S)
    if n % 2 == 0:
      return S2
    else:
      return matmul(M, S2)

def matmul(M1, M2):
        j,k,m,n = M1
        p,q,r,s = M2
        return (j*p + k*r,  j*q + k*s,
                        m*p + n*r,  m*q + n*s)

def fib7(i):
           M = powM((0,1,1,1), i)
           return M[1]
