#include <iostream>
#include "stack.h"

using namespace std;

typedef struct {
 int n;
 char src;
 char dest;
 char spare;
} goal;

int main(void) {
 int n;
 Stack<goal> s;
 goal g;

 //get the number of discs
 cout <<"How many discs? ";
 cin >> n;

 //create the initial goal
 g.n = n;
 g.src = 'A';
 g.dest = 'C';
 g.spare = 'B';

 //put the intial goal on the stack
 s.push(g);

 while(!s.isEmpty()) {
   //pull the current goal off the stack
   g = s.pop();

   //base condition
   if(g.n==1) {
     //do something
     cout << "(" << g.src << "," << g.dest << ")" << endl;
     //skip the rest
     continue;
   }

   //recurse (reverse order)
   goal sg;
   sg.n = g.n-1;
   sg.src = g.spare;
   sg.dest = g.dest;
   sg.spare = g.src;
   s.push(sg);

   sg.n = 1;
   sg.src = g.src;
   sg.dest = g.dest;
   sg.spare = g.spare;
   s.push(sg);

   sg.n = g.n-1;
   sg.src = g.src;
   sg.dest = g.spare;
   sg.spare = g.dest;
   s.push(sg);

 }
}