// L-42 MCS 360 Wed 1 Dec 2010 : numbers3.cpp

#include<iostream>
using namespace std;

void numbers3 ( int n, int *accu, int r, int sum, int k );
/* generates and prints all possible numbers of n digits long,
 * (every digit is in the range 0..r-1), whose sum is divisible
 * by 3, starting at position k in the accu */

int main ( void )
{
   cout << "Give number of digits : ";
   int n; cin >> n;
   cout << "Give the radix : ";
   int r; cin >> r;
   {
      int accu[n];
      numbers3(n,accu,r,0,0);
   }
   return 0;
}

void numbers3 ( int n, int *accu, int r, int sum, int k )
{
   int i;

   if(k == n)
   {
      if(sum % 3 == 0)
      {
         for(int i=0; i<n; i++) cout << accu[i];
         cout << endl;
      }
   }
   else
   {
      for(int i=0; i<r; i++)
      {
         accu[k] = i;
         numbers3(n,accu,r,sum+i,k+1);
      }
   }
}

