// A1Q1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;

class Papatest  
{

	public:

		
		bool Compare(char* Enfant, char* Parent, int indice){
			return (Enfant[indice] == Parent[indice]);
		}



		bool ParentPotentiel (char* Enfant, 
								char* 
Maman, 
									
char* Papa,
										
int ctrPapa,
											
int ctrMaman){
				
			int j=0;
			while(Enfant[j]){
				if(Compare(Enfant, Maman, j))
					if(Compare(Enfant, Papa, j)){
								
								return 
								
(ParentPotentiel(Enfant+(j+1), Maman+(j+1), Papa+(j+1), ctrPapa++, 
ctrMaman)
								||
								
ParentPotentiel(Enfant+(j+1), Maman+(j+1), Papa+(j+1), ctrPapa, 
ctrMaman++));

							}else ctrMaman++;
						else
							if(Compare(Enfant, 
Papa, j))
								ctrPapa++;
							else
								return 
false;

					j++;
				}
				
			return(ctrMaman == ctrPapa);

		}

		vector<int>  PapaImpossible (char* CodeEnfant, 
				char* CodeMaman, 
				char** CodeHommes, 
				int NombreHommes){
				
			
				vector<int> Impossible;	

				for(int i=0; i<NombreHommes; i++)
					if(!ParentPotentiel(CodeEnfant, 
CodeMaman, CodeHommes[i], 0, 0))
						Impossible.push_back(i);

					return Impossible;
			}		
};



int main(int argc, char* argv[]){

	/* Le departement de Quality Assurance est coupe a cause de 
problemes budgetaires        */
	/* ie :il pourrait y avoir des bogues									  
*/


	if(argc<4){
		cout<<"utilisation: [Code Enfant] [Code Maman] [Code 
Papa]+"<<endl;
		return 0;
	}
	

	char* CodeEnfant  = new char[strlen(argv[1])+1];
	char* CodeMaman = new char[strlen(argv[2])+1];

	int nHommes = argc-3;
	char** PapasPotentiels = new char*[nHommes];

	strcpy(CodeEnfant, argv[1]);
	strcpy(CodeMaman, argv[2]);

	
	for(int i=0; i<nHommes; i++){
		PapasPotentiels[i] = new char[strlen(argv[i+3])+1];	
		strcpy(PapasPotentiels[i], argv[i+3]);
	
	}

	
	Papatest Tester;
	vector<int> b = Tester.PapaImpossible(CodeEnfant, CodeMaman, 
PapasPotentiels, nHommes);
	cout<<endl<<"Ces individus ne peuvent pas etre le pere"<<endl;
	
	cout<<endl;
	for(unsigned int j=0; j<b.size();j++)
		cout<<b[j]<<":"<<PapasPotentiels[b[j]]<<endl;
	

	delete [] CodeEnfant;
	delete [] CodeMaman;
	for(int j=0; j<nHommes; j++)
		delete[] PapasPotentiels[j];
	delete [] PapasPotentiels;
	
	return 0;
}
