

from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_sentencepiece_available,
    is_tokenizers_available,
    is_torch_available,
)


lowerCAmelCase_       	=	{'''configuration_plbart''': ['''PLBART_PRETRAINED_CONFIG_ARCHIVE_MAP''', '''PLBartConfig''']}

try:
					if not is_sentencepiece_available():
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					pass
else:
					lowerCAmelCase_       	=	['''PLBartTokenizer''']

try:
					if not is_torch_available():
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					pass
else:
					lowerCAmelCase_       	=	[
					    '''PLBART_PRETRAINED_MODEL_ARCHIVE_LIST''',
					    '''PLBartForCausalLM''',
					    '''PLBartForConditionalGeneration''',
					    '''PLBartForSequenceClassification''',
					    '''PLBartModel''',
					    '''PLBartPreTrainedModel''',
					]


if TYPE_CHECKING:
					from .configuration_plbart import PLBART_PRETRAINED_CONFIG_ARCHIVE_MAP, PLBartConfig

					try:
										if not is_sentencepiece_available():
															raise OptionalDependencyNotAvailable()
					except OptionalDependencyNotAvailable:
										pass
					else:
										from .tokenization_plbart import PLBartTokenizer

					try:
										if not is_torch_available():
															raise OptionalDependencyNotAvailable()
					except OptionalDependencyNotAvailable:
										pass
					else:
										from .modeling_plbart import (
										    PLBART_PRETRAINED_MODEL_ARCHIVE_LIST,
										    PLBartForCausalLM,
										    PLBartForConditionalGeneration,
										    PLBartForSequenceClassification,
										    PLBartModel,
										    PLBartPreTrainedModel,
										)


else:
					import sys

					lowerCAmelCase_       	=	_LazyModule(__name__, globals()['''__file__'''], _import_structure)


from __future__ import annotations


def   __SCREAMING_SNAKE_CASE					(SCREAMING_SNAKE_CASE__       ):
						snake_case_   =	len(SCREAMING_SNAKE_CASE__       )
						# We need to create solution object to save path.
						snake_case_   =	[[0 for _ in range(SCREAMING_SNAKE_CASE__       )] for _ in range(SCREAMING_SNAKE_CASE__       )]
						snake_case_   =	run_maze(SCREAMING_SNAKE_CASE__  ,		0  ,		0  ,		SCREAMING_SNAKE_CASE__       )
						if solved:
												print('''\n'''.join(str(SCREAMING_SNAKE_CASE__       ) for row in solutions       )       )
						else:
												print('''No solution exists!'''       )
						return solved


def   __SCREAMING_SNAKE_CASE					(SCREAMING_SNAKE_CASE__  ,		SCREAMING_SNAKE_CASE__  ,		SCREAMING_SNAKE_CASE__  ,		SCREAMING_SNAKE_CASE__       ):
						snake_case_   =	len(SCREAMING_SNAKE_CASE__       )
						# Final check point.
						if i == j == (size - 1):
												snake_case_   =	1
												return True

						snake_case_   =	(not i < 0) and (not j < 0)  # Check lower bounds
						snake_case_   =	(i < size) and (j < size)  # Check upper bounds

						if lower_flag and upper_flag:
												# check for already visited and block points.
												snake_case_   =	(not solutions[i][j]) and (not maze[i][j])
												if block_flag:
																		# check visited
																		snake_case_   =	1

																		# check for directions
																		if (
																		    run_maze(SCREAMING_SNAKE_CASE__  ,		i + 1  ,		SCREAMING_SNAKE_CASE__  ,		SCREAMING_SNAKE_CASE__       )
																		    or run_maze(SCREAMING_SNAKE_CASE__  ,		SCREAMING_SNAKE_CASE__  ,		j + 1  ,		SCREAMING_SNAKE_CASE__       )
																		    or run_maze(SCREAMING_SNAKE_CASE__  ,		i - 1  ,		SCREAMING_SNAKE_CASE__  ,		SCREAMING_SNAKE_CASE__       )
																		    or run_maze(SCREAMING_SNAKE_CASE__  ,		SCREAMING_SNAKE_CASE__  ,		j - 1  ,		SCREAMING_SNAKE_CASE__       )
																		):
																								return True

																		snake_case_   =	0
																		return False
						return False


if __name__ == "__main__":
					import doctest

					doctest.testmod()