/* REKURS.CPP */
/* VISUAL-C++, Vers. 4.1 */

#include <stdio.h>

#define TRUE -1
#define FALSE 0
const int MAXB = 9;     
char von[] = {0, 1, 0, 0, 0, 1, 0, 0, 0, 0}; // S E N D M O R Y
char bis[] = {9, 9, 9, 9, 9, 9, 9, 9, 9, 9};
int used[10] = {FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE };
long b[MAXB];

void test(int i)
{
  char j, k;
  for (j=von[i]; j<=bis[i]; j++)
  {
    if (!used[j])
    {
      b[i] = j;
      used[j] = TRUE;
      if (i<MAXB) 
	  {
		test (i + 1);  // Rekursion
	  }
      else
	  {
		printf("\x0d");
        for (k=1; k<=MAXB; k++)
		{
          printf("%i ",b[k]);
		}
        if (((b[1] * 10 + b[2]) * 10 + b[3]) * 10 + b[4] + // SEND
            ((b[5] * 10 + b[6]) * 10 + b[7]) * 10 + b[2] == // MORE
            (((b[5] * 10 + b[6]) * 10 + b[3]) * 10 + b[2]) * 10 + b[8]) // MONEY
		{
		  printf(" OK\n");
        }  
	  }
      used[b[i]] = FALSE;
	}
  }
}

void main(void)
{
  test(1);
}

