



def   SCREAMING_SNAKE_CASE_       (  _snake_case  :list[list[int]]  ,      _snake_case  :list[list[int]]							)     ->    list[list[int]]:
   _A						     =					[]
   _A						     =					len(_snake_case							)
   for i in range(_snake_case							):
      _A						     =					[]
      for j in range(_snake_case							):
         _A						     =					0
         for k in range(_snake_case							):
            _A						     =					val + matrix_a[i][k] * matrix_b[k][j]
         list_a.append(_snake_case							)
      matrix_c.append(_snake_case							)
   return matrix_c

def   SCREAMING_SNAKE_CASE_       (  _snake_case  :int							)     ->    list[list[int]]:
   return [[int(row == column							) for column in range(_snake_case							)] for row in range(_snake_case							)]

def   SCREAMING_SNAKE_CASE_       (  _snake_case  :int							)     ->    int:
   if n <= 1:
      return n
   _A						     =					identity(2							)
   _A						     =					[[1, 1], [1, 0]]
   _A						     =					n - 1
   while n > 0:
      if n % 2 == 1:
         _A						     =					multiply(_snake_case  ,      _snake_case							)
      _A						     =					multiply(_snake_case  ,      _snake_case							)
      _A						     =					int(n / 2							)
   return res_matrix[0][0]

def   SCREAMING_SNAKE_CASE_       (  _snake_case  :int							)     ->    int:
   if n <= 1:
      return n
   _A						     =					0
   _A						     =					1
   for _ in range(2  ,      n + 1							):
      _A     ,						_A						     =					fiba, fiba + fiba
   return fiba

def   SCREAMING_SNAKE_CASE_       (  )     ->    None:
   for ordinal in "0th 1st 2nd 3rd 10th 100th 1000th".split():
      _A						     =					int(''''''.join(c for c in ordinal if c in '''0123456789'''							)							)  # 1000th --> 1000
      print(
          F'''{ordinal} fibonacci number using matrix exponentiation is '''
          F'''{nth_fibonacci_matrix(_snake_case							)} and using bruteforce is '''
          F'''{nth_fibonacci_bruteforce(_snake_case							)}\n'''							)
   # from timeit import timeit
   # print(timeit("nth_fibonacci_matrix(1000000)",
   #              "from main import nth_fibonacci_matrix", number=5))
   # print(timeit("nth_fibonacci_bruteforce(1000000)",
   #              "from main import nth_fibonacci_bruteforce", number=5))
   # 2.3342058970001744
   # 57.256506615000035


if __name__ == "__main__":
    import doctest

    doctest.testmod()
    main()








from __future__ import annotations

def   SCREAMING_SNAKE_CASE_       (  _snake_case  :int							)     ->    int | None:
   for r in range(1  ,      _snake_case							):
      _A						     =					[]
      for x in range(n - 1							):
         _A						     =					pow(_snake_case  ,      _snake_case  ,      _snake_case							)
         if val in li:
            break
         li.append(_snake_case							)
      else:
         return r
   return None


if __name__ == "__main__":
   UpperCAmelCase_		   =				int(input("""Enter a prime number q: """))
   UpperCAmelCase_		   =				find_primitive(q)
   if a is None:
      print(f'Cannot find the primitive for the value: {a!r}')
   else:
      UpperCAmelCase_		   =				int(input("""Enter private key of A: """))
      UpperCAmelCase_		   =				pow(a, a_private, q)
      UpperCAmelCase_		   =				int(input("""Enter private key of B: """))
      UpperCAmelCase_		   =				pow(a, b_private, q)

      UpperCAmelCase_		   =				pow(b_public, a_private, q)
      UpperCAmelCase_		   =				pow(a_public, b_private, q)

      print("""The key value generated by A is: """, a_secret)
      print("""The key value generated by B is: """, b_secret)



