Собственно вот задача:
Получить все расстановки восьми ладей на шахматной доске, при которых 
ни одна ладья не угрожает другой. 
моя попытка решения:
Код:
#include<iostream>
using namespace std;
const int size = 8;
void searchpos (int [],int,int &);
bool searchrep (int [],int,int);
void main()
{
   int pos[size],i = 0,p = 0;
   searchpos(pos,p,i);
   cout << i << endl;
   system("pause");
}
void searchpos(int a[],int p,int &i)
{
   for (int j = 0;j < size;j++)
      if (searchrep(a,j,p))
      {
         a[p] = j;
         searchpos (a,p+1,i);
      }
      else
         if (p == size - 1)
            i++;
}
bool searchrep(int a[],int i,int p)
{
   for (int j = 0;j < p;j++)
      if (a[j] == i)
         return 0;
   return 1;
}
Проблема в том, что ответ выводится в семь раз больший, чем нужно. Помогите, пожалуйста, разобраться.