class Cle
{

	protected Bit[] cle;

	public Cle(String s)
	{
		cle = new Bit[s.length()];
		for (int i=0; i<s.length(); i++)
			cle[i] = new Bit(s.charAt(i));
	}
	
	public Cle(int n)
	{
		cle = new Bit[n];
	}
	
	public int length()
	{
		return cle.length;
	}
	
	public Bit at(int i)
	{
		// Si hors des limites : exceptions ...
		return cle[i];
	}
	
	public String toString()
	{
		String resultat = "";
		for (int i=0; i<cle.length; i++)
			resultat += cle[i];
		return resultat;
	}
	
	public Cle copie()
	{
		Cle resultat = new Cle(cle.length);
		for (int i=0; i<resultat.length(); i++)
			resultat.cle[i] = cle[i];
		return resultat;
	}
	
	public Cle complement()
	{
		Cle resultat = new Cle(cle.length);
		for (int i=0; i<resultat.length(); i++)
			resultat.cle[i] = cle[i].not();
		return resultat;
	}
	
	public Cle permutation(int[] indices)
	{
		Cle resultat = this.copie();
		for (int i=0; i<indices.length; i++)
			resultat.cle[i] = cle[indices[i]];
		return resultat;
	}
	
	public Cle xor(Cle c)
	{
		Cle resultat = this.copie();
		for (int i=0; i<resultat.length(); i++)
			resultat.cle[i] = cle[i].xor(c.cle[i]);
		return resultat;
	}
	
}
