#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int x[] = {0,1,2,3,4,5,6,7,8,9};
int A,B,C,D,E,F,G,H,I,J;
do {
A = x[0];
B = x[1];
C = x[2];
D = x[3];
E = x[4];
F = x[5];
G = x[6];
H = x[7];
I = x[8];
J = x[9];
int p9 = G;
int p19 = C;
for (int p1 = 1; p1<10; p1++)
for (int p2 = 1; p2<10; p2++)
if(p1 != p2 &&
p1+p2 == 10*D+E )
for (int p4 = 1; p4<10; p4++)
if(p4!= p1 &&
p1+p4+p9 == A*10+B)
for(int p5=1; p5<10; p5++)
if(p5!=p2 &&
p4!=p5 &&
p5+p2 == C )
for(int p3 =1; p3<10; p3++)
if(p3 != p4 &&
p3 != p5)
for(int p6 = 1; p6<10; p6++)
if(p6!= p3 &&
p6 != p4 &&
p6 != p5 &&
p3+p4+p5+p6 == 10*D+D)
for (int p7=1; p7<10; p7++)
if(p7 != p9 )
for (int p8=1; p8<10; p8++)
if( p8 != p7 &&
p8 != p3 &&
p8 != p9 &&
p7+p8+p9 == 10*D+F)
for (int p12=1; p12<10; p12++)
if( p12 !=p7 &&
p12+p7 == H )
for (int p13=1; p13<10; p13++)
if( p13 != p3 &&
p13 != p8 &&
p13 != p12 &&
p12+p13 == G )
for (int p17=1; p17<10; p17++)
if( p17 != p3 &&
p17 != p8 &&
p17 != p13 &&
p17 != p19 &&
p17+p13+p8+p3 == 10*A + F )
for (int p18=1; p18<10; p18++)
if( p18 != p17 &&
p18 != p19 )
for (int p21=1; p21<10; p21++)
if( p21 != p18 &&
p18 + p21 == D*10+C )
for (int p14=1; p14<10; p14++)
if( p14 != p19 )
for (int p22=1; p22<10; p22++)
if( p22 != p14 &&
p22 != p19 &&
p22 != p21 &&
p22 + p21 == D*10+C &&
p14 + p19 + p22 == A*10+I )
for (int p10=1; p10<10; p10++)
if( p10 != p6 )
for (int p11=1; p11<10; p11++)
if( p11 != p10 &&
p10 + p11 == H )
for (int p15=1; p15<10; p15++)
if( p15 != p6 &&
p15 != p10 &&
p15 != p14 )
for (int p16=1; p16<10; p16++)
if( p16 != p11 &&
p16 != p14 &&
p16 != p15 &&
p11 + p16 == G &&
p14 + p15 + p16 == A*10 + H)
for (int p20=1; p20<10; p20++)
if( p20 != p6 &&
p20 != p10 &&
p20 != p15 &&
p20 != p17 &&
p20 != p18 &&
p20 != p19 &&
p6 + p10 + p15 + p20 == D*10 + G &&
p17 + p18 + p19 +p20 == H*10 + B)
{
// --- ---
// | 1 | 2 |
// --- --- --- ---
// | 3 | 4 | 5 | 6 |
// --- --- --- --- --- ---
//| 7 | 8 | G | X | a | b |
// --- --- --- --- --- ---
//| c | d | X | e | f | g |
// --- --- --- --- --- ---
// | h | i | C | j |
// --- --- --- ---
// | 1 | 2 |
// --- ---
cout << "A: "<<x[0]<<" B: "<<x[1]<<" C: "<<x[2]<<" D: "<<x[3]<<" E: "<<x[4]<<
" F: "<<x[5]<<" G: "<<x[6]<<" H: "<<x[7]<<" I: "<<x[8]<<" J: "<<x[9]<<endl;
cout<< " --- ---\n"<<
" | "<<p1<<" | "<<p2<<" |\n"<<
" --- --- --- ---\n"<<
" | "<<p3<<" | "<<p4<<" | "<<p5<<" | "<<p6<<" |\n"<<
" --- --- --- --- --- ---\n"<<
"| "<<p7<<" | "<<p8<<" | "<<p9<<" | X | "<<p10<<" | "<<p11<<" |\n"<<
" --- --- --- --- --- ---\n"<<
"| "<<p12<<" | "<<p13<<" | X | "<<p14<<" | "<<p15<<" | "<<p16<<" |\n"<<
" --- --- --- --- --- ---\n"<<
" | "<<p17<<" | "<<p18<<" | "<<p19<<" | "<<p20<<" |\n"<<
" --- --- --- ---\n"<<
" | "<<p21<<" | "<<p22<<" |\n"<<
" --- ---\n\n";
}
}
while(next_permutation(x, x+10));
}