Problem:
Score : 100 points

Problem Statement

You are given a 4-character string S consisting of uppercase English letters.
Determine if S consists of exactly two kinds of characters which both appear twice in S.

Constraints

The length of S is 4.

S consists of uppercase English letters.

Input

Input is given from Standard Input in the following format:

S

Output

If S consists of exactly two kinds of characters which both appear twice in S, print Yes; otherwise, print No.

Sample Input 1

ASSA

Sample Output 1

Yes

S consists of A and S which both appear twice in S.

Sample Input 2

STOP

Sample Output 2

No

Sample Input 3

FFEE

Sample Output 3

Yes

Sample Input 4

FREE

Sample Output 4

No

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl "\n"
#define MOD 1000000007
#define INF (int)1e9
#define MEM(a, b) memset(a, (b), sizeof(a))

int main()
{	 ios_base::sync_with_stdio(false);
	 cin.tie(NULL);
	
	string s;
	cin>>s;
	map<char,ll> mp;
	map<char,ll> :: iterator it;

	for(ll i=0; i<4; i++)
	{	it=mp.find(s[i]);
		if(it ==mp.end())
			{ mp.insert( {s[i], 1} ); }
		else 
		{
			it->second = it->second+1;
		}
	}
	bool flag=true;
	for(it=mp.begin(); it!=mp.end(); it++)
	{
		if(it->second %2== 0)
			{ }
		else { flag = false; break; }
	}
	if(flag==false)
		cout<<"NO";
	else cout<<"YES";
	return 0;
}