#include "puzutl.h"

int koho[] = { 0, 1, 5, 6, 7, 8, -1, -2}; // -1:÷, -2:=
int nkoho = sizeof(koho)/sizeof(koho[0]);
int used[] = { 0, 0, 0, 0, 0, 0, 0, 0};

char equ( int i)
{
  if( i == -1) return '/';
  if( i == -2) return '=';
  return    i+'0';
}
cstring equ( int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8)
{
  static char buf[11];
  buf[0] = equ(i1);
  buf[1] = equ(i2);
  buf[2] = equ(i3);
  buf[3] = equ(i3);
  buf[4] = equ(i4);
  buf[5] = equ(i5);
  buf[6] = equ(i1);
  buf[7] = equ(i6);
  buf[8] = equ(i7);
  buf[9] = equ(i8);
  buf[10] = NIL;
  return    buf;
}

void check( int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8)
{
  int buf[11];
  if( i1 < 0 || i3 < 0) return; // 2つあるのは記号にはならない
  buf[0] = i1;
  buf[1] = i2;
  buf[2] = i3;
  buf[3] = i3;
  buf[4] = i4;
  buf[5] = i5;
  buf[6] = i1;
  buf[7] = i6;
  buf[8] = i7;
  buf[9] = i8;
  int a = 0, b = 0, c = 0;
  for( int i=0; i< 10; i++) {
    if( buf[i] == -1) { i++; break;}
    if( buf[i] == -2) return;   // ÷より前に=が出現した。
    a *= 10;
    a += buf[i];
  }
  for( ; i< 10; i++) {
    if( buf[i] == -2) { i++; break;}
    b *= 10;
    b += buf[i];
  }
  if( i == 10) return;          // =より後ろの文字が無い
  for( ; i< 10; i++) {
    c *= 10;
    c += buf[i];
  }
  if( b == 0) return;
  if( (a % b) == 0 && a / b == c) {
    ps( "Find( %d / %d = %d (%s)\n", a, b, c, equ(i1,i2,i3,i4,i5,i6,i7,i8));
  }
}

int main( int argc, cstring argv[])
{
  int cnt = 0;
  for( int i1=0; i1< nkoho; i1++) { // P
    used[i1] = YES;
    for( int i2=0; i2< nkoho; i2++) { // U
      if( used[i2]) continue;
      used[i2] = YES;
      for( int i3=0; i3< nkoho; i3++) { // Z
        if( used[i3]) continue;
        used[i3] = YES;
        for( int i4=0; i4< nkoho; i4++) { // L
          if( used[i4]) continue;
          used[i4] = YES;
          for( int i5=0; i5< nkoho; i5++) { // E
            if( used[i5]) continue;
            used[i5] = YES;
            for( int i6=0; i6< nkoho; i6++) { // A
              if( used[i6]) continue;
              used[i6] = YES;
              for( int i7=0; i7< nkoho; i7++) { // R
                if( used[i7]) continue;
                used[i7] = YES;
                for( int i8=0; i8< nkoho; i8++) { // K
                  if( used[i8]) continue;
                  used[i8] = YES;
                  cnt++;
                  // P U Z Z L E P A R K で式が完成するか?
                  check( koho[i1], koho[i2], koho[i3], koho[i4], koho[i5], koho[i6], koho[i7], koho[i8]);
                  used[i8] = NO;
                }
                used[i7] = NO;
              }
              used[i6] = NO;
            }
            used[i5] = NO;
          }
          used[i4] = NO;
        }
        used[i3] = NO;
      }
      used[i2] = NO;
    }
    used[i1] = NO;
  }
  ps( "cnt:%d\n", cnt);
  return    0;
}