#include <iostream>
#include <vector>
using namespace std;
int n;
bool is_nijo[10001];
vector <int> a;


void sieve2() {
  for(int i=1;i<n;i++) {
    is_nijo[i] = false;
  }
  for(int i=1;i<n;i++) {
    is_nijo[(i * i) % n] = true;
  }
  for(int i=1;i<n;i++) {
    if(is_nijo[i]) {
      a.push_back(i);
    }
  }
}

int main() {
  while(cin >> n) {
    if(n==0) break;
    sieve2();
    int b[10001] = {};
    while(!a.empty()) {
      int temp = a[a.size()-1];a.pop_back();
      for(unsigned int i=0;i<a.size();i++) {

	if(0 <=temp - a[i] && temp - a[i] <= (n-1)/2) {
	  b[temp-a[i]]++;
	}
	else if(temp - a[i] < 0) {
	  if(temp-a[i]+n <= (n-1)/2) {
	    b[temp-a[i]+n]++;
	  }
	  else {
	    b[a[i]-temp]++;
	  }
	}
	else if(temp - a[i] > (n-1)/2) {
	  b[n-temp+a[i]]++;
	}


	if(0 <=a[i] - temp && a[i] - temp <= (n-1)/2) {
	  b[a[i] - temp]++;
	}
	else if(a[i] - temp < 0) {
	  if(a[i] - temp+n <= (n-1)/2) {
	    b[a[i] - temp+n]++;
	  }
	  else {
	    b[temp - a[i]]++;
	  }
	}
	else if(a[i] - temp > (n-1)/2) {
	  b[n-a[i]+temp]++;
	}

      }
    }
    if(n != 3) {    
      for(int i=1;i<=(n-1)/2;i++) {
	cout << b[i] << endl;
      }
    }
    else {
      cout << 1 << endl;
    }
  }
}