#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <cstring>
#include <queue>
#include <set>
#include <map>
#include <functional>
#include <string>
#include <cassert>
#include <string>
#define SIZE 1000005

using namespace std;
typedef long long int ll;
typedef pair <int,int> P;

char str[SIZE];
int A[SIZE],B[SIZE];
P pos[5];
int cnt[5];

int main()
{
	scanf("%s",&str);
	string S=str;
	S.erase(unique(S.begin(),S.end()),S.end());
	int n=S.size();
	for(int i=0;i<n;i++)
	{
		A[i]=S[i]-'A';
		cnt[A[i]]++;
	}
	for(int i=0;i<3;i++) pos[i]=P(cnt[i],i);
	sort(pos,pos+3,greater <P>());
	int a=pos[0].second,d=pos[0].first-pos[1].first;
	int sz=0;
	for(int i=0;i<n;i++)
	{
		B[sz++]=A[i];
		if(sz>=3&&d>0&&B[sz-2]==a&&B[sz-1]!=B[sz-3])
		{
			d--;
			B[sz-2]=B[sz-1];
			sz--;
		}
		if(sz==1&&d>0&&B[sz-1]==a)
		{
			d--;
			sz--;
		}
	}
	while(1)
	{
		if(d>0&&sz>=1&&B[sz-1]==a)
		{
			d--;
			sz--;
		}
		else
		{
			break;
		}
	}
	n=sz;
	memset(cnt,0,sizeof(cnt));
	for(int i=0;i<n;i++)
	{
		A[i]=B[i];
		cnt[A[i]]++;
	}
	for(int i=0;i<3;i++) pos[i]=P(cnt[i],i);
	sort(pos,pos+3,greater <P>());
	a=pos[0].second;
	int b=pos[1].second,c=pos[2].second;
	int db=pos[0].first-pos[1].first,dc=pos[0].first-pos[2].first;
	//printf("%d %d %d : %d : %d %d\n",a,b,c,pos[0].first,db,dc);
	sz=0;
	for(int i=0;i<n;i++)
	{
		B[sz++]=A[i];
		if(sz>=3&&db>0)
		{
			if(B[sz-3]==c&&B[sz-2]==a&&B[sz-1]==c)
			{
				db--;
				sz-=2;
			}
			else if(B[sz-3]==a&&B[sz-2]==c&&B[sz-1]==a)
			{
				db--;
				sz-=2;
			}
		}
		else if(sz==2&&db>0)
		{
			if(B[sz-2]==a&&B[sz-1]==c)
			{
				db--;
				sz-=2;
			}
			else if(B[sz-2]==c&&B[sz-1]==a)
			{
				db--;
				sz-=2;
			}
		}
		if(sz>=3&&dc>0)
		{
			if(B[sz-3]==b&&B[sz-2]==a&&B[sz-1]==b)
			{
				dc--;
				sz-=2;
			}
			else if(B[sz-3]==a&&B[sz-2]==b&&B[sz-1]==a)
			{
				dc--;
				sz-=2;
			}
		}
		else if(sz==2&&dc>0)
		{
			if(B[sz-2]==a&&B[sz-1]==b)
			{
				dc--;
				sz-=2;
			}
			else if(B[sz-2]==b&&B[sz-1]==a)
			{
				dc--;
				sz-=2;
			}
		}
	}
	while(1)
	{
		bool up=false;
		if(db>0&&sz>=2)
		{
			if(B[sz-2]==a&&B[sz-1]==c)
			{
				db--;
				sz-=2;
				up=true;
			}
			else if(B[sz-2]==c&&B[sz-1]==a)
			{
				db--;
				sz-=2;
				up=true;
			}
		}
		else if(dc>0&&sz>=2)
		{
			if(B[sz-2]==a&&B[sz-1]==b)
			{
				dc--;
				sz-=2;
				up=true;
			}
			else if(B[sz-2]==b&&B[sz-1]==a)
			{
				dc--;
				sz-=2;
				up=true;
			}
		}
		if(!up) break;
	}
	for(int i=0;i<sz;i++) printf("%c",'A'+B[i]);puts("");
	return 0;
}
