unittest
{
	assert( [ "3", "1 2 2" ].parse.expand.solve == "Yes" );
	assert( [ "3", "1 1 2" ].parse.expand.solve == "No" );
	assert( [ "5", "4 3 4 3 4" ].parse.expand.solve == "No" );
	assert( [ "3", "2 2 2" ].parse.expand.solve == "Yes" );
	assert( [ "4", "2 2 2 2" ].parse.expand.solve == "Yes" );
	assert( [ "5", "3 3 3 3 3" ].parse.expand.solve == "No" );
	
	assert( [ "6", "5 4 3 4 3 4" ].parse.expand.solve == "No" );		// 追加ケース
	assert( [ "6", "4 4 3 4 3 4" ].parse.expand.solve == "Yes" );		// 追加ケース
	assert( [ "6", "4 4 4 4 3 4" ].parse.expand.solve == "No" );		// 追加ケース
	assert( [ "6", "2 2 2 3 3 3" ].parse.expand.solve == "No" );		// 追加ケース
}



import std.algorithm;
import std.conv;
import std.range;
import std.stdio;
import std.typecons;

void main()
{
	stdin.byLineCopy.parse.expand.solve.writeln;
}

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	input.popFront;
	auto as = input.front.split.to!( long[] );
	return tuple( as );
}

auto solve( long[] as )
{
	auto gs = as.sort().group.array;
	auto mi = gs.front[ 0 ];
	auto ma = gs.back[ 0 ];
	switch( ma - mi )
	{
		case 0:
			// 全体の色数をn、各色1匹ずつにできれば成り立つ。
			// 全体の色数をmi、各色2匹以上にできれば成り立つ。
			if( ( mi == as.length.signed - 1 ) || ( mi * 2 <= as.length.signed ) ) return "Yes";
			break;
		
		case 1:
			// 全体の色数をma、miと発言した猫の色を1匹ずつ、maと発言した猫の色を2匹以上にできれば成り立つ。
			auto mit = gs.front[ 1 ];
			if( mit <= mi && mit + ( ma - mit ) * 2 <= as.length ) return "Yes";
			break;
		
		default:
			// 全体の色数は「a+0(自分が他と同じ色のとき) or a+1(自分が他と違う色のとき)」しかありえないので、
			// miとmaが2以上離れていたら絶対に成り立たない。
			break;
	}
	return "No";
}
