F

我们知道一个数ii不断乘另一个数jj,并且取模一个固定的数kk必定会发生周期变化。我们打表发现1,10,100,1000,10000...取余375的话,只要到第5位数,取模后的值就固定下来了,同理2到9不过是取模后乘个值而已。所以我们暴力dfs我们答案串的最后4位数,得到最后4位分别取什么,然后其他位的总贡献是固定的,最后得到一个取模后的值,判断是不是0就可以了。

#define lowbit(x) x&(-x)
#define lson rt<<1
#define rson rt<<1|1
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int MAXN = 5e5 + 5;
const int MAXM = 1e6 + 5;
const int INF = 0x3f3f3f3f;
const double eps = 1e-8;
const int mod = 998244353;
int n, m, h;
string str;
int len;
int tong[10][5];
int num[10];
int val[5];
int ans[5];
bool ishave = false;
void dfs(int now){
	if(now == min(len + 1, 5) && !ishave){
		int ans = 0;
		for(int i = 1; i <= min(len, 4); i++){
			ans = (ans + tong[val[i]][i]) % 375;
		}
		for(int i = 0; i <= 9; i++)ans = (ans + tong[i][4] * num[i] % 375) % 375;
		if(ans == 0){
			bool f = false;
			if(num[0] > 0){
				for(int i = 1; i <= 9; i++){
					if(num[i] > 0)f = true;
				}
			}
			if(num[0] == 0 || f){
				ishave = true;
				for(int i = 1; i <= 10; i++){
					for(int j = 1; j <= num[i % 10]; j++)cout << i % 10;
				}
				for(int i = min(len, 4); i >= 1; i--)cout << val[i];
			}
		}
	}
	if(now == min(len + 1, 5))return;
	for(int i = 0; i <= 9; i++){
		if(num[i] > 0){
			num[i]--;
			val[now] = i;
			dfs(now + 1);
			num[i]++;
		}
	}
}
int main(){
	for(int i = 0; i <= 9; i++){
		int now = i;
		for(int j = 1; j <= 4; j++){
			tong[i][j] = now;
			now = now * 10 % 375;
		}
	}
	cin >> str;
	len = str.length();
	for(int i = 0; i < len; i++)num[str[i] - '0']++;
	dfs(1);
	if(!ishave){
		cout << -1 << endl;
	}
}