#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

int radix;
int pwr[10];
int r[20];
int n;

int pw(int a, int b)
{
  int p= 1;
  
  while (b>0)
    {
     if (b&1)
        p*= a;
     b>>= 1;
     a*= a;     
    }
  return p;
}


bool e(int x)
{
   n= 0;
   int t= x;
   while (x>0)
     {
      r[n++]= x % radix;
      x/= radix;
     }
   int s= 0;
   for (int k=0; k<n; k++)
      s+= pwr[ r[k] ];
   return s==t;
   
}

string rc(int x, int r)
{
  const char dig[] = "0123456789abcdef";
  if (x==0)
     return "0";

  string t="";
  while (x>0)
    {
     t= dig[(x%r)] + t;
     x/= radix;
    }
  return t; 
}

int main(void)
{
   cin >> radix;
   cout << "radix: " << radix << endl;

   for (int k=0; k<radix; k++)
     pwr[k]= pw(k,k);

   int u= 1;
   while (u>0)
      {
       if( e(u) )
         {
          cout << u << " = (";
          for (int k=n-1; k>=0; k--)         
             cout << r[k];
          cout << ")" << radix << " = ";
          cout << r[n-1] << "**" << r[n-1];
          for (int k=n-2; k>=0; k--)         
             cout << " + " << r[k] << "**" << r[k];
          cout << " = (";
          cout << pwr[r[n-1]];
          for (int k=n-2; k>=0; k--)         
             cout << " + " << rc(pwr[r[k]], radix);
          cout << ")" << radix << endl;
         }
       u++;
      }

   return EXIT_SUCCESS;
}

