#include <string>
#include <iostream>
#include <vector>
#include <fstream>
#include <iterator>
using namespace std;


int main()
{
   
    vector<string> v = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p"};
    vector<string> m = {"ab","ae","af","ba","bc","be","bf","bg","cb","cd","cf","cg","ch","dc","dg","dh","ea","eb","ef","ei","ej","fa","fb","fc","fe","fg","fi","fj","fk","gb","gc","gd","gf","gh","gj","gk","gl","hc","hd","hg","hk","hl","ie","if","ij","im","in","je","jf","jg","ji","jk","jm","jn","jo","kf","kg,","kh","kj","kl","kn","ko","kp","lg","lh","lk","lo","lp","mi","mj","mn","ni","nj","nk","nm","no","oj","ok","ol","on","op","pk","pl","po"};
    
   string sv = "z";
    vector <string> vier, drei,funf,sechs,sieben,acht,neun,zehn,elf;
    string sp ;
    string sh;
    string sd, sr, so;
   
    for (int i=0;i<16;i++){
        sh = v[i];
    
       
        for (int j=0;j<m.size ();j++){
            
            
        sv = m[j];
        sd = m [j];
          
        sv.erase(1,1);
        sd.erase (0,1);
        
        if (sh == sv && sh != sd)
         {
          
          sp = sh + sd;    
          
          drei.push_back(sp);
         }
        
        
	   }
	 }
	
	   
	for (size_t i=0;i<drei.size ();i++){
        sh = drei[i];
        sr = drei [i];
        so = drei [i];
        sr.erase (0,1);
        so.erase (1,1);
       
        for (size_t j=0;j<m.size ();j++){
        sv = m[j];
        sd = m [j];
          
        sv.erase(1,1);
        sd.erase (0,1);
        
        if (sr == sv && so != sd)
         {
         
          
          sp = sh + sd;    
          
        vier.push_back(sp);
         }
      
            }
            }
         for (int l=0;l <drei.size ();l++){
                    cout <<drei [l] << endl;
          }
         for (int k=0;k<vier.size ();k++){
    
    cout << vier [k] << endl;
  }
    cout << vier.size ()<< endl;
    string s3;
  //  int vier = vier.size ();
    //vier
	for (size_t i=0;i<vier.size();i++){
        sh = vier[i];
        sr = vier [i];
        so = vier[i];
        s3 = vier[i];
        sr.erase (0,2);
        so.erase (1,2);
        s3.erase (0,1);
        s3.erase (1,1);
       
        for (size_t j=0;j<m.size ();j++){
        sv = m[j];
        sd = m [j];
          
        sv.erase(1,1);
        sd.erase (0,1);
        
        if (sr == sv && so != sd && s3 != sd)
         {
         
          
          sp = sh + sd;    
          
        funf.push_back(sp);
         }
      
            }
            }
        
         for (int k=0;k<funf.size();k++){
    
    cout << funf [k] << endl;
  }
    cout << funf.size()<< endl;
    string s4;
    
   // funf
	 for (size_t i=0;i<funf.size();i++){
        sh = funf[i];
        sr = funf[i];
        so = funf[i];
        s3 = funf[i];
        s4 = funf[i];
        sr.erase (0,3);
        so.erase (1,3);
        s3.erase (0,1);
        s3.erase (1,2);
        s4.erase (0,2);
        s4.erase (1,1);
       
        for (size_t j=0;j<m.size ();j++){
        sv = m[j];
        sd = m [j];
          
        sv.erase(1,1);
        sd.erase (0,1);
        
        if (sr == sv && so != sd && s3 != sd&&sd!=s4)
         {
         
          
          sp = sh + sd;    
          
        sechs.push_back(sp);
         }
      
            }
            }
        
         for (int k=0;k <sechs.size();k++){
    
    cout << sechs [k] << endl;
  }
    cout << sechs.size ()<< endl;
	string s5;
	//sechs
	 for (size_t i=0;i<sechs.size();i++){
        sh = sechs[i];
        sr = sechs[i];
        so = sechs[i];
        s3 = sechs[i];
        s4 = sechs[i];
        s5 = sechs [i];
        sr.erase (0,4);
        so.erase (1,4);
        s3.erase (0,1);
        s3.erase (1,3);
        s4.erase (0,2);
        s4.erase (1,2);
        s5.erase (0,3);
        s5.erase (1,1);
       
        for (size_t j=0;j<m.size ();j++){
        sv = m[j];
        sd = m [j];
          
        sv.erase(1,1);
        sd.erase (0,1);
        
        if (sr == sv && so != sd && s3 != sd&&sd!=s4&&sd!=s5)
         {
         
          
          sp = sh + sd;    
          
        sieben.push_back(sp);
         }
      
            }
            }
        
         for (int k=0;k <sieben.size();k++){
    
    cout << sieben [k] << endl;
  }
    cout << sieben.size ()<< endl;
   string s6;
       //sieben
	 for (size_t i=0;i<sieben.size();i++){
        sh = sieben[i];
        sr = sieben[i];
        so = sieben[i];
        s3 = sieben[i];
        s4 = sieben[i];
        s5 = sieben[i];
        s6 = sieben[i];
        sr.erase (0,5);
        so.erase (1,5);
        s3.erase (0,1);
        s3.erase (1,4);
        s4.erase (0,2);
        s4.erase (1,3);
        s5.erase (0,3);
        s5.erase (1,2);
        s6.erase (0,4);
        s6.erase (1,1);
        
       
        for (size_t j=0;j<m.size ();j++){
        sv = m[j];
        sd = m [j];
          
        sv.erase(1,1);
        sd.erase (0,1);
        
        if (sr == sv && so != sd && s3 != sd&&sd!=s4&&sd!=s5&&sd!=s6)
         {
         
          
          sp = sh + sd;    
          
        acht.push_back(sp);
         }
      
            }
            }
        
         for (int k=0;k <acht.size();k++){
    
    cout << acht [k] << endl;
  }
    cout << acht.size ()<< endl;
	
	string s7;
	//acht
	 for (size_t i=0;i<acht.size();i++){
        sh = acht[i];
        sr = acht[i];
        so = acht[i];
        s3 = acht[i];
        s4 = acht[i];
        s5 = acht[i];
        s6 = acht[i];
        s7 = acht[i];
        sr.erase (0,6);
        so.erase (1,6);
        s3.erase (0,1);
        s3.erase (1,5);
        s4.erase (0,2);
        s4.erase (1,4);
        s5.erase (0,3);
        s5.erase (1,3);
        s6.erase (0,4);
        s6.erase (1,2);
        s7.erase (0,5);
        s7.erase (1,1);
        
       
        for (size_t j=0;j<m.size ();j++){
        sv = m[j];
        sd = m [j];
          
        sv.erase(1,1);
        sd.erase (0,1);
        
        if (sr == sv && so != sd && s3 != sd&&sd!=s4&&sd!=s5&&sd!=s6&&sd!=s7)
         {
         
          
          sp = sh + sd;    
          
        neun.push_back(sp);
         }
      
            }
            }
        
         for (size_t k=0;k<neun.size();k++){
    
    cout << neun [k] << endl;
  }
    cout << neun.size ()<< endl;
  

       string s8;
	//neun
	 for (size_t i=0;i<neun.size();i++){
           sh = neun[i];
           sr = neun[i];
          so = neun[i];
          s3 = neun[i];
          s4 = neun[i];
         s5 = neun[i];
          s6 = neun[i];
          s7 = neun[i];
          s8 = neun[i];
          sr.erase (0,7);
         so.erase (1,7);
         s3.erase (0,1);
         s3.erase (1,6);
         s4.erase (0,2);
          s4.erase (1,5);
          s5.erase (0,3);
          s5.erase (1,4);
           s6.erase (0,4);
         s6.erase (1,3);
         s7.erase (0,5);
         s7.erase (1,2);
         s8.erase (0,6);
        s8.erase (1,1);
        
       
          for (size_t j=0;j<86;j++){
           sv = m[j];
            sd = m [j];
          
           sv.erase(1,1);
           sd.erase (0,1);
        
          if (sr == sv && so != sd && s3 != sd&&sd!=s4&&sd!=s5&&sd!=s6&&sd!=s7&&sd!=s8)
           {
         
          
             sp = sh + sd;    
          
          zehn.push_back(sp);
            }
      
              }
               }
        
             for (int k=0;k <zehn.size();k++){
    
       cout << zehn [k] << endl;
      }
       cout << zehn.size ()<< endl;
	
	string s9;
	//zehn
	 for (size_t i=0;i<zehn.size();i++){
           sh = zehn[i];
           sr = zehn[i];
          so = zehn[i];
          s3 = zehn[i];
          s4 = zehn[i];
         s5 = zehn[i];
          s6 = zehn[i];
          s7 = zehn[i];
          s8 = zehn[i];
          s9 = zehn [i];
          sr.erase (0,8);
         so.erase (1,8);
         s3.erase (0,1);
         s3.erase (1,7);
         s4.erase (0,2);
          s4.erase (1,6);
          s5.erase (0,3);
          s5.erase (1,5);
           s6.erase (0,4);
         s6.erase (1,4);
         s7.erase (0,5);
         s7.erase (1,3);
         s8.erase (0,6);
        s8.erase (1,2);
        s9.erase (0,7);
        s9.erase (1,1);
        
       
          for (size_t j=0;j<86;j++){
           sv = m[j];
            sd = m [j];
          
           sv.erase(1,1);
           sd.erase (0,1);
        
          if (sr == sv && so != sd && s3 != sd&&sd!=s4&&sd!=s5&&sd!=s6&&sd!=s7&&sd!=s8&&sd!=s9)
           {
         
          
             sp = sh + sd;    
          
          elf.push_back(sp);
            }
      
              }
               }
        
             for (int k=0;k <elf.size();k++){
    
       cout << elf [k] << endl;
      }
       cout << elf.size ()<< endl;
	
	ofstream output_file ("./example3.txt");
    std::ostream_iterator<std::string> output_iterator(output_file, "\n");
    std::copy(vier.begin(), vier.end(), output_iterator);

	
	
	}