#include <iostream.h>

int stones[8];
int goal = 8;
int sums[200];
int max = 34;
int curstone = -1;

void push(void) {
  for (int pv=0;pv<curstone;pv++) {
    if (sums[stones[pv]+stones[curstone]]==0)
      sums[stones[pv]+stones[curstone]] = curstone;
  }
  curstone++;
  if (curstone == 0) stones[curstone] = 0;
  else stones[curstone] = stones[curstone-1];
}

void pop(void) {
  curstone--;
  for (int pv=0;pv<curstone;pv++) {
    if (sums[stones[pv]+stones[curstone]]==curstone)
      sums[stones[pv]+stones[curstone]] = 0;
  }
}

bool cont(void) {
  bool answer = false;
  if (stones[curstone] <= max) for (int pv=0;pv<curstone;pv++) {
    if (sums[stones[pv]+stones[curstone]]!=0) {
      answer = true;
      break;
    }
  }
  return(answer);
}

void print(void) {
  for (int i=0;i<curstone;i++)
    cout << "  " << stones[i];
  cout << "\n";
}

void main (void) {
  for (int i=0;i<200;i++) sums[i]=0;
  do {
    if (curstone == goal) {
      print();
      pop();
    } else if (curstone == -1) push();
    else {
      do {
        stones[curstone]++;
      } while (cont());
      if (stones[curstone] > max) pop();
      else push();
    }
  } while (curstone >= 0);
}
