





def      a__			(       lowercase__	):






   '''simple docstring'''






   if not head:
      return True
   # split the list to two parts
   UpperCAmelCase_    ,							UpperCAmelCase_           =head.next, head
   while fast and fast.next:
      UpperCAmelCase_           =fast.next.next
      UpperCAmelCase_           =slow.next
   UpperCAmelCase_           =slow.next
   UpperCAmelCase_           =None  # Don't forget here! But forget still works!
   # reverse the second part
   UpperCAmelCase_           =None
   while second:
      UpperCAmelCase_           =second.next
      UpperCAmelCase_           =node
      UpperCAmelCase_           =second
      UpperCAmelCase_           =nxt
   # compare two parts
   # second part has the same or one less node
   while node:
      if node.val != head.val:
         return False
      UpperCAmelCase_           =node.next
      UpperCAmelCase_           =head.next
   return True




def      a__			(       lowercase__	):






   '''simple docstring'''






   if not head or not head.next:
      return True

   # 1. Get the midpoint (slow)
   UpperCAmelCase_           =UpperCAmelCase_           =UpperCAmelCase_           =head
   while fast and fast.next:
      UpperCAmelCase_    ,							UpperCAmelCase_           =fast.next.next, slow.next

   # 2. Push the second half into the stack
   UpperCAmelCase_           =[slow.val]
   while slow.next:
      UpperCAmelCase_           =slow.next
      stack.append(slow.val	)

   # 3. Comparison
   while stack:
      if stack.pop() != cur.val:
         return False
      UpperCAmelCase_           =cur.next

   return True





def      a__			(       lowercase__	):






   '''simple docstring'''






   if not head or not head.next:
      return True
   UpperCAmelCase_           ={}
   UpperCAmelCase_           =0
   while head:
      if head.val in d:
         d[head.val].append(lowercase__	)
      else:
         UpperCAmelCase_           =[pos]
      UpperCAmelCase_           =head.next
      pos += 1
   UpperCAmelCase_           =pos - 1
   UpperCAmelCase_           =0
   for v in d.values():
      if len(lowercase__	) % 2 != 0:
         middle += 1
      else:
         UpperCAmelCase_           =0
         for i in range(0	,     len(lowercase__	)	):
            if v[i] + v[len(lowercase__	) - 1 - step] != checksum:
               return False
            step += 1
      if middle > 1:
         return False
   return True









'''simple docstring'''

def 	__lowerCamelCase	( lowerCAmelCase_    )     -> bool:
		if not all(x.isalpha() for x in string    ):
				raise ValueError('String must only contain alphabetic characters.'    )

		_a	: Tuple								=				sorted(string.lower()    )
		return len(lowerCAmelCase_    ) == len(set(lowerCAmelCase_    )    )


if __name__ == "__main__":
							__lowerCAmelCase		     =  input('''Enter a string ''').strip()

							__lowerCAmelCase		     =  is_isogram(input_str)
							print(f"""{input_str} is {'an' if isogram else 'not an'} isogram.""")




