





# this script reports modified .py files under the desired list of top-level sub-dirs passed as a list of arguments, e.g.:
#   python ./utils/get_modified_files.py utils src tests examples
#
# it uses git to find the forking point and which files were modified - i.e. files not under git won't be considered
# since the output of this script is fed into Makefile commands it doesn't print a newline after the results

import re
import subprocess
import sys


_lowerCamelCase :    List[Any]  							= subprocess.check_output('''git merge-base main HEAD'''.split()).decode('''utf-8''')
_lowerCamelCase :    Optional[Any]  							= subprocess.check_output(f"git diff --name-only {fork_point_sha}".split()).decode('''utf-8''').split()

_lowerCamelCase :    Optional[int]  							= '''|'''.join(sys.argv[1:])
_lowerCamelCase :    Optional[Any]  							= re.compile(rf"^({joined_dirs}).*?\.py$")

_lowerCamelCase :    Dict  							= [x for x in modified_files if regex.match(x)]
print(''' '''.join(relevant_modified_files), end='''''')













_lowerCamelCase :    dict[tuple[int, int, int], int]  							= {}




def _a (  SCREAMING_SNAKE_CASE__      :  int			,				SCREAMING_SNAKE_CASE__      :  int			,				SCREAMING_SNAKE_CASE__      :  int       )	->    int:

							'''simple docstring'''






							if late == 3 or absent == 2:
														return 0

							# if we have no days left, and have not failed any other rules,
							# we have a prize string
							if days == 0:
														return 1

							# No easy solution, so now we need to do the recursive calculation

							# First, check if the combination is already in the cache, and
							# if yes, return the stored value from there since we already
							# know the number of possible prize strings from this point on
							SCREAMING_SNAKE_CASE__       :      Union[str, Any]     =						(days, absent, late)
							if key in cache:
														return cache[key]

							# now we calculate the three possible ways that can unfold from
							# this point on, depending on our attendance today

							# 1) if we are late (but not absent), the "absent" counter stays as
							# it is, but the "late" counter increases by one
							SCREAMING_SNAKE_CASE__       :      Tuple     =						_calculate(days - 1			,				SCREAMING_SNAKE_CASE__			,				late + 1       )

							# 2) if we are absent, the "absent" counter increases by 1, and the
							# "late" counter resets to 0
							SCREAMING_SNAKE_CASE__       :      Dict     =						_calculate(days - 1			,				absent + 1			,				0       )

							# 3) if we are on time, this resets the "late" counter and keeps the
							# absent counter
							SCREAMING_SNAKE_CASE__       :      Any     =						_calculate(days - 1			,				SCREAMING_SNAKE_CASE__			,				0       )

							SCREAMING_SNAKE_CASE__       :      str     =						state_late + state_absent + state_ontime

							SCREAMING_SNAKE_CASE__       :      Optional[int]     =						prizestrings
							return prizestrings




def _a (  SCREAMING_SNAKE_CASE__      :  int = 30       )	->    int:

							'''simple docstring'''






							return _calculate(SCREAMING_SNAKE_CASE__			,				absent=0			,				late=0       )


if __name__ == "__main__":
		print(solution())






