


import math

class 			lowerCamelCase_					:





							def __init__(							self			,       _SCREAMING_SNAKE_CASE    ):
								a_     			=   len(_SCREAMING_SNAKE_CASE    )
								a_     			=   [0] * (
								    4 * self.N
								)  # approximate the overall size of segment tree with array N
								self.build(1			,       0			,       self.N - 1    )





							def   __magic_name__      (							self			,       _SCREAMING_SNAKE_CASE    ):
								return idx * 2





							def   __magic_name__      (							self			,       _SCREAMING_SNAKE_CASE    ):
								return idx * 2 + 1





							def   __magic_name__      (							self			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE    ):  # noqa: E741
								if l == r:
									a_     			=   A[l]
								else:
									a_     			=   (l + r) // 2
									self.build(self.left(_SCREAMING_SNAKE_CASE    )			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE    )
									self.build(self.right(_SCREAMING_SNAKE_CASE    )			,       mid + 1			,       _SCREAMING_SNAKE_CASE    )
									a_     			=   max(self.st[self.left(_SCREAMING_SNAKE_CASE    )]			,       self.st[self.right(_SCREAMING_SNAKE_CASE    )]    )





							def   __magic_name__      (							self			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE    ):
								return self.update_recursive(1			,       0			,       self.N - 1			,       a - 1			,       b - 1			,       _SCREAMING_SNAKE_CASE    )





							def   __magic_name__      (							self			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE    ):  # noqa: E741
								if r < a or l > b:
									return True
								if l == r:
									a_     			=   val
									return True
								a_     			=   (l + r) // 2
								self.update_recursive(self.left(_SCREAMING_SNAKE_CASE    )			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE    )
								self.update_recursive(self.right(_SCREAMING_SNAKE_CASE    )			,       mid + 1			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE    )
								a_     			=   max(self.st[self.left(_SCREAMING_SNAKE_CASE    )]			,       self.st[self.right(_SCREAMING_SNAKE_CASE    )]    )
								return True





							def   __magic_name__      (							self			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE    ):
								return self.query_recursive(1			,       0			,       self.N - 1			,       a - 1			,       b - 1    )





							def   __magic_name__      (							self			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE    ):  # noqa: E741
								if r < a or l > b:
									return -math.inf
								if l >= a and r <= b:
									return self.st[idx]
								a_     			=   (l + r) // 2
								a_     			=   self.query_recursive(self.left(_SCREAMING_SNAKE_CASE    )			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE    )
								a_     			=   self.query_recursive(self.right(_SCREAMING_SNAKE_CASE    )			,       mid + 1			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE    )
								return max(_SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE    )





							def   __magic_name__      (							self    ):
								a_     			=   []
								for i in range(1			,       N + 1    ):
									show_list += [self.query(_SCREAMING_SNAKE_CASE			,       _SCREAMING_SNAKE_CASE    )]
								print(_SCREAMING_SNAKE_CASE    )


if __name__ == "__main__":
			_A							     =       [1, 2, -4, 7, 3, -5, 6, 11, -20, 9, 14, 15, 5, 2, -8]
			_A							     =       15
			_A							     =       SegmentTree(A)
			print(segt.query(4, 6))
			print(segt.query(7, 11))
			print(segt.query(7, 12))
			segt.update(1, 3, 111)
			print(segt.query(1, 15))
			segt.update(7, 8, 235)
			segt.show_data()



def 			__SCREAMING_SNAKE_CASE		(		UpperCamelCase		:      str	)     ->	int:



	"""simple docstring"""






	a_     			=   len(UpperCamelCase	)
	a_     			=   [0] * length
	a_     			=   [[False for i in range(UpperCamelCase	)] for j in range(UpperCamelCase	)]
	for i, c in enumerate(UpperCamelCase	):
		a_     			=   i
		for j in range(i + 1	):
			if c == string[j] and (i - j < 2 or is_palindromic[j + 1][i - 1]):
				a_     			=   True
				a_     			=   min(UpperCamelCase     ,					0 if j == 0 else (cut[j - 1] + 1)	)
		a_     			=   mincut
	return cut[length - 1]


if __name__ == "__main__":
			_A							     =       input('Enter the string: ').strip()
			_A							     =       find_minimum_partitions(s)
			print(f'Minimum number of partitions required for the \'{s}\' is {ans}')