#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
struct each{
	int cnt;
	char ch;
}a[3];
char A,B,C,s[N],t[N];
int n,vi[N],nex[N],bfe[N];
bool com(each x,each y){
	return x.cnt<y.cnt;
}
void erase(int x){
	nex[bfe[x]]=nex[x];
	bfe[nex[x]]=bfe[x];
	vi[x]=1;
}
bool check(int i,int j,char c1,char c2){
	if(!i||!j)	return false;
	if(s[i]==c1&&s[j]==c2)	return true;
	if(s[i]==c2&&s[j]==c1)	return true;
	return false;
}
bool is(int i,int j){
	if(!i||!j)	return true;
	return s[i]!=s[j];
}
void pri(){
	for(int i=1;i<=n;i++)
		if(!vi[i]){
			for(int j=i;j;j=nex[j])
				putchar(s[j]);
			return ;
		}
}
void solve(){
	int c1=a[0].cnt,c2=a[1].cnt,c3=a[2].cnt;
	for(int i=1;i<=n&&c2<c3;i++)
		if(!vi[i]&&s[i]==C&&is(bfe[i],nex[i]))	erase(i),--c3;
	if(c2<c3){
		for(int i=1;i<=n&&c2<c3;i++)
			if(!vi[i]&&check(i,nex[i],A,C)&&is(bfe[i],nex[nex[i]]))
				erase(nex[i]),erase(i),--c1,--c3;
	}
	for(int i=1;i<=n&&c1<c2;i++)
		if(!vi[i]&&check(i,nex[i],B,C)&&is(bfe[i],nex[nex[i]]))
			erase(nex[i]),erase(i),--c2,--c3;
	for(int i=1;i<=n&&c1<c2&&c1<c3;i++)
		if(!vi[i]&&is(bfe[i],nex[i])){
			if(s[i]==B)	--c2,erase(i);
			if(s[i]==C)	--c3,erase(i);
		}
	pri();
}
int main(){
	scanf("%s",s+1),n=strlen(s+1);
	a[0].ch='A',a[1].ch='B',a[2].ch='C';
	for(int i=1;i<=n;i++){
		bfe[i]=i-1;
		if(i!=n)	nex[i]=i+1;
	}
	for(int i=1;i<=n;i++)
		if(s[i]==s[i-1])	erase(i);
	for(int i=1;i<=n;i++){
		if(vi[i])	continue;
		if(s[i]=='A')	a[0].cnt++;
		else	if(s[i]=='B')	a[1].cnt++;
		else	a[2].cnt++;
	}
	sort(a,a+3,com);
	A=a[0].ch,B=a[1].ch,C=a[2].ch,solve();
	return 0;
}
