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.

Constraints

* 1 \leq |S| \leq 10^5
* S consists of `a`, `b` and `c`.

Input

Input is given from Standard Input in the following format:


S


Output

If the objective is achievable, print `YES`; if it is unachievable, print `NO`.

Examples

Input

abac


Output

YES


Input

aba


Output

NO


Input

babacccabab


Output

YES
# -*- coding:utf-8 -*-
import sys

DBG_FLAG = 0

def p_dbg(str):
    if(DBG_FLAG == 1):
        sys.stdout.flush()
        print str

S=raw_input()
# 回文でない文字列を作るには
# -> 文字列を一旦ソートする。
# -> 特定の文字を一つ選択し、先頭に置く
# -> 選択した文字とは別の文字を選択し、次に配置する。
#    このとき、i-2番目の文字と一致しないこと。

# 回文ではない
# -> 1.同じ文字が2文字以上連続しない
#    2.異なる2文字の部分文字列があるとき、直後に
#      逆順の文字列が存在しない

array = list(S)
p_dbg(array)

a_ary = [char for char in array if char == "a"]
b_ary = [char for char in array if char == "b"]
c_ary = [char for char in array if char == "c"]

a_len = len(a_ary)
b_len = len(b_ary)
c_len = len(c_ary)

if ((a_len + b_len + c_len) > 2) and ((a_len == 0) or (b_len == 0) or (c_len == 0)):
    print "NO"
else:
    result = "YES"
    tmp_array = []
    while (a_len + b_len + c_len) > 2:
        p_dbg("len:"+str(a_len)+":"+str(b_len)+":"+str(c_len)+":"+str(a_len + b_len + c_len))
        if (a_len == 0) or (b_len == 0) or (c_len == 0):
            result = "NO"
            break
        else:
            a_len = a_len -1
            b_len = b_len -1
            c_len = c_len -1

    p_dbg("len:"+str(a_len)+":"+str(b_len)+":"+str(c_len)+":"+str(a_len + b_len + c_len))
    if ((a_len == 2) or (b_len == 2) or (c_len == 2)):
        result = "NO"
    if (a_len + b_len + c_len) == 1:
        result = "YES"

    if result == "NO":
        print "NO"
    else:
        print "YES"
