output_description: If the objective is achievable, print `YES`; if it is unachievable, print
  `NO`.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      S
attempt: import math, string, itertools, fractions, heapq, collections, re, array, bisect, sys, random, time, copy, functools
  
  sys.setrecursionlimit(10**7)
  inf = 10**20
  eps = 1.0 / 10**15
  mod = 10**9 + 7
  
  
  def LI():
      return [int(x) for x in sys.stdin.readline().split()]
  
  
  def LI_():
      return [int(x) - 1 for x in sys.stdin.readline().split()]
  
  
  def LF():
      return [float(x) for x in sys.stdin.readline().split()]
  
  
  def LS():
      return sys.stdin.readline().split()
  
  
  def I():
      return int(sys.stdin.readline())
  
  
  def F():
      return float(sys.stdin.readline())
  
  
  def S():
      return input()
  
  
  def pf(s):
      return print(s, flush=True)
  
  
  def main():
      s = S()
      c = collections.Counter(s)
      if len(c) == 1:
          if len(s) == 1:
              return "YES"
          return "NO"
      if len(c) == 2:
          if len(s) <= 2:
              return "YES"
          return "NO"
      if max(c.values()) - min(c.values()) <= 1:
          return "YES"
  
      return "NO"
  
  
  print(main())
  
problem_description: Statement
  
  Snuke has a string S consisting of three kinds of letters: `a`, `b` and `c`.
  
  He has a phobia for palindromes, and wants to permute the characters in S so
  that S will not contain a palindrome of length 2 or more as a substring.
  Determine whether this is possible.
samples: [{"input": "abac", "output": "YES\n    \n\nAs it stands now, S contains a palindrome `aba`, but we can permute the\ncharacters to get `acba`, for example, that does not contain a palindrome of\nlength 2 or more.\n\n* * *"}, {"input": "aba", "output": "NO\n    \n\n* * *"}, {"input": "babacccabab", "output": "YES"}]