/* vpm.c
 *
 * Nombres vampires en base dix
 *
 * 2003 - Jean-Paul Davalan jpdvl@wanadoo.fr
 *
 * 
 * utiliser de préférence vpmb.c pour toute base de 2 à 36
 * 
 * usage :
 * vpm 3
 * vpm 3 a
 *
 * compilation:
 * gcc -o vpm vpm.c
 *
 */
#include <stdio.h>
#include <stdlib.h>

long nvamp=0;

int w=1;

int liste(int k) {
    int r, t[10], z, vp;
    long e, i, j, amin = 1, amax;
    long long u, x, nmin, nmax;
    for(i=0;i<k-1;i++) amin *=10;
    amax = 10*amin;
    nmin= amin*amax;
    nmax=nmin*10;
    for(i=amin+1;i<amax;i++) {
      u=nmin;
      e=(long)((long long)nmin/i);
      for(j=((i<e)?e:i); j< amax && u < nmax;j++) {
        u=i*j;
	if(u<nmin) continue;
	if(u>nmax) break;
	if(i%10==0 && j%10==0) continue;
	for(r=0;r<10;r++) t[r] = 0;
	x = amax*i+j;
	for(r=0;r<2*k;r++) { 
	  z=x%10; t[z]++;
	  x=(x-z)/10;
	}
        x = u;
        for(r=0;r<2*k;r++) {
          z=x%10; t[z]--;
          x=(x-z)/10;
        }
        vp=1;
	
	for(r=0;vp==1 && r<10;r++) {
	  if(t[r] != 0)
	    vp=0;
	}
	if(vp==1 ) {
	  nvamp++;
	  if(w) printf("%ld %ld %ld %lld\n",nvamp,i,j,u);
	  fflush(stdout);
	}
      }
    }
    if(!w) printf("%d\n",nvamp);
}

int main(int argc, char *argv[]) {
  int n;
  if(argc<2) {
    exit(0);
  }
  if(argc>2) w=0;

  n=atoi(argv[1]);
  if(n<2 || n>6) exit(0);
  liste(n);
  return 0;
}
