/*
 * Automatically-generated program to solve the following cryptarithm:
 *      nisha + joshi = nishu
 */
#include <stdio.h>
#include <stdlib.h>
#define M 8
int tuple[10];
int Used[10] = {0,0,0,0,0,0,0,0,0,0};
void perm(int*, int);
int match();
void print();
main () {
   perm (Used, M);
}
void perm (int Used[10], int Size) {
int i;
if (Size == 1) {
   for (i=0; i<10; i++)
      if (!Used[i]) {
         tuple[M-Size] = i;
         if (match()) print();
         }
   }
else {
   for (i=0; i<10; i++) {
      if (!Used[i]) {
         Used[i] = 1;
         tuple[M-Size] = i;
         perm (Used, Size-1);
         Used[i] = 0;
         }
      }
   }
}
int match () {
return !(         1*(tuple[4]+tuple[1]-tuple[7])+
                 10*(tuple[3]+tuple[3]-tuple[3])+
                100*(tuple[2]+tuple[2]-tuple[2])+
               1000*(tuple[1]+tuple[6]-tuple[1])+
              10000*(tuple[0]+tuple[5]-tuple[0]));
}
void print () {
printf ("%d%d%d%d%d + %d%d%d%d%d = %d%d%d%d%d\n",
        tuple[0], tuple[1], tuple[2], tuple[3], tuple[4], 
        tuple[5], tuple[6], tuple[2], tuple[3], tuple[1], 
        tuple[0], tuple[1], tuple[2], tuple[3], tuple[7]);
return;
}
