#include <stdio.h>
#include <vector>
#include <unordered_set>
using namespace std;
vector<vector<int>> result;
bool used[10];
int max_commom_divisor(int a, int b) {
if (a < b) { //确保a>b
int tem = a;
a = b;
b = tem;
}
int remain = a % b;
int divisor = b;
while (remain != 0) {
a = b;
b = remain;
remain = a % b;
divisor = b;
}
return divisor;
}
bool formula_verification(vector<int>f) {
if (f.size() != 9) {
return false;
}
float a = (float)(f[0] * 10 + f[1]) / f[2];
float b = (float)(f[3] * 10 + f[4]) / f[5];
float c = (float)(f[6] * 10 + f[7]) / f[8];
if (a + b == c) {
return true;
}
return false;
}
vector<vector<int>> build_fraction() {
vector<int> f;
vector<int> numbers;
vector<vector<int>>fractions;
numbers.clear();
fractions.clear();
for (int i = 1; i <= 9; i++) {
if (!used[i]) {
numbers.push_back(i);
}
}
for (int i = 0; i < numbers.size(); i++) {
f.clear();
f.push_back(numbers[i]);
used[numbers[i]] = true;
for (int j = 0; j < numbers.size(); j++) {
if (!used[numbers[j]]) {
f.push_back(numbers[j]);
used[numbers[j]] = true;
for (int k = 0; k < numbers.size(); k++) {
if (!used[numbers[k]]) {
f.push_back(numbers[k]);
used[numbers[k]] = true;
if (f[2] != 1 && max_commom_divisor(f[0] * 10 + f[1], f[2]) == 1) {
fractions.push_back(f);
}
f.pop_back();
used[numbers[k]] = false;
}
}
f.pop_back();
used[numbers[j]] = false;
}
}
used[numbers[i]] = false;
}
return fractions;
}
void build_formula() {
vector<int> formula;
vector<vector<int>>fractions1 = build_fraction();
for (int i = 0; i < fractions1.size(); i++) {
formula.clear();
for (int j = 0; j < fractions1[i].size(); j++) {
formula.push_back(fractions1[i][j]);
used[fractions1[i][j]] = true;
}
vector<vector<int>>fractions2 = build_fraction();
for (int k = 0; k < fractions2.size(); k++) {
for (int v = 0; v < fractions2[k].size(); v++) {
formula.push_back(fractions2[k][v]);
used[fractions2[k][v]] = true;
}
vector<vector<int>>fractions3 = build_fraction();
for (int x = 0; x < fractions3.size(); x++) {
for (int y = 0; y < fractions3[x].size(); y++) {
formula.push_back(fractions3[x][y]);
}
if (formula_verification(formula)) {
result.push_back(formula);
}
for (int y = 0; y < fractions3[x].size(); y++) {
formula.pop_back();
}
}
for (int v = 0; v < fractions2[k].size(); v++) {
formula.pop_back();
used[fractions2[k][v]] = false;
}
}
for (int j = 0; j < fractions1[i].size(); j++) {
used[fractions1[i][j]] = false;
}
}
}
int main() {
for (int i = 0; i < 10; i++) {
used[i] = false;
}
build_formula();
for (int i = 0; i < result.size(); i++) {
printf("%d%d/%d+%d%d/%d=%d%d/%d", result[i][0], result[i][1], result[i][2], result[i][3], result[i][4], result[i][5], result[i][6], result[i][7], result[i][8]);
printf("\n");
}
}