#include<bits/stdc++.h>
#define cs const
#define pb push_back
using namespace std;
typedef long long ll;
cs int N = 1e6 + 50; 
int n, ct[3], p[3];
char S[N]; int a[N];
bool ban[N];
void work(){
	if(ct[p[0]]<=0) return;
	int m=0; for(int i=1,la=-1;i<=n;i++)
	if(!ban[i])a[++m]=a[i]; n=m;
	memset(ban,0,sizeof(ban));
	a[n+1]=p[0];
	for(int i=1,l=0; i<=n+1 && ct[p[1]]>ct[p[0]]; i++)
	if(a[i]==p[0]){
		if(i-l<=2){ l = i; continue; }
		int z = (i-l-2)/2, o = l+1;
		if(l==0||i==n+1) z=(i-1)/2;
		while(z && ct[p[1]] > ct[p[0]])
		ban[o] = ban[o+1] = true,
		o += 2, --z, --ct[p[1]], --ct[p[2]];
		l = i;
	} 
	if(ct[p[1]]>ct[p[0]]) return;
	m=0; for(int i=1; i<=n; i++)
	if(!ban[i]) a[++m]=a[i]; n=m;
	for(int i=1,la=-1; i<=n; i++)
	putchar(a[i]+'A'), 
	assert(la!=a[i]), la=a[i];
	assert(ct[0]==ct[1]&&ct[1]==ct[2]);
}
void chk(){ if(ct[p[1]]==ct[p[2]]) work(), exit(0); }
int main(){
	#ifdef FSYolanda
	freopen("1.in","r",stdin);
//	freopen("my.out","w",stdout);
	#endif
	scanf("%s",S+1); n=strlen(S+1); int _n=0;
	for(int i=1; i<=n; i++)
	if(S[i]!=S[i-1])a[++_n]=S[i]-'A'; n=_n;
	for(int i=1; i<=n; i++) ++ct[a[i]];
	p[1] = 1, p[2] = 2;
	for(int i=0; i<3; i++)
	for(int j=i+1; j<3; j++)
	if(ct[p[i]] > ct[p[j]])
	swap(p[i], p[j]);
	if(ct[p[1]]==ct[p[2]])
	return work(), 0; a[n+1] = p[0];
	for(int i=1,l=a[1]==p[0]; i<=n+1; i++)
	if(a[i]==p[0]){
		if(i-l<=2){ l=i; continue; }
		int o=a[l+1], e=a[i-1]; 
		if(o==p[2]) --ct[p[2]], ban[l+1] = true, chk();
		if(e==p[2]) --ct[p[2]], ban[i-1] = true, chk(); l = i;
	} _n = 0;
	if(a[1]==p[2] && !ban[1]) --ct[p[2]], ban[1]=true, chk();
	if(a[n]==p[2] && !ban[n]) --ct[p[2]], ban[n]=true, chk();
	for(int i=1; i<=n; i++)
	if(!ban[i]) a[++_n] = a[i]; n = _n;
	memset(ban,0,sizeof(ban));
	for(int i=1; i<n; i++)
	if(a[i]==p[0]&&a[i+1]==p[2]){
		--ct[p[0]],--ct[p[2]];
		ban[i]=ban[i+1]=true,chk();
	} return 0;
} 