Códigos del curso

Listas concurrentes — material extra

12 archivos Java · haz clic en cada uno para desplegarlo

Puedes copiar cada archivo desde aquí, o clonar el repositorio FC_CConcurrente completo:

git clone https://github.com/gilde-valeria/FC_CConcurrente.git

Archivos

Archivos

CoarseCallable.java54 líneas

Listas/callables/CoarseCallable.java

package callables;

import java.util.concurrent.Callable;

import lists.CoarseGrained;

public class CoarseCallable implements Callable<Boolean>{
   private String item;
    private CoarseGrained coarselist;//En este caso tiene como atributo a un tipo de lista CoarseGRained
    private int num;
    public CoarseCallable(String item,CoarseGrained coarselist,int num){
        this.item = item;
        this.coarselist= coarselist;
        this.num = num;
    }

    @Override
    public Boolean call(){
        try{
            if (this.num > 25 && this.num<100) {//Probabilidad de ejecutar contains de 75%
                this.coarselist.contains(this.item);
                //System.out.println("Thead name: "+ Thread.currentThread().getName()+" contains: "+this.item); //Para ver como se ejecutan

            }
            if (this.num < 13) {//Probabilidad de ejecutar add
                //System.out.println("Thead name: "+ Thread.currentThread().getName()+" add: "+this.item); //Para ver como se ejecutan
                this.coarselist.add(this.item);
            }
            else{
            if (this.num < 25){//Probabilidad de ejecutar remove
                //System.out.println("Thead name: "+ Thread.currentThread().getName()+" remove: "+this.item); //Para ver como se ejecutan
                this.coarselist.remove(this.item);
            }}
            
            if (this.num == 110){//Para que un hilo imprima
                
                try {
                    Thread.sleep(1000); // Sleeping for 100ms
                    }
                    catch (InterruptedException e) {
                    System.out.format("Interrupted Exception: " + e.getMessage());
                    e.printStackTrace();
                    }
                this.coarselist.printList();
            }
            return true;

        }
        catch(Exception e){
            return false;
        }
    }
}
LazyCallable.java60 líneas

Listas/callables/LazyCallable.java

package callables;


import java.util.concurrent.Callable;

import lists.LazyList;


public class LazyCallable implements Callable<Boolean>{
    private String item;
    private LazyList lazylist;//En este caso tiene como atributo a un tipo de lista CoarseGRained
    private int num;
    
    public LazyCallable(String item, LazyList lazyList, int num){
        this.item = item;
        this.lazylist = lazylist;
        this.num = num;
    }
    @Override
    public Boolean call(){
        try {
      //      System.out.println("Here___ call try");

            if (this.num > 25 && this.num<100) {//Probabilidad de ejecutar contains de 75%
                //System.out.println("Here___if contains");

                this.lazylist.contains(this.item);
                //System.out.println("Thead name: "+ Thread.currentThread().getName()+" contains: "+this.item); //Para ver como se ejecutan
    
            }
            if (this.num < 13) {//Probabilidad de ejecutar add
                //System.out.println("Thead name: "+ Thread.currentThread().getName()+" add: "+this.item); //Para ver como se ejecutan
                this.lazylist.add(this.item);
            }
            else{
            if (this.num < 25){//Probabilidad de ejecutar remove
                //System.out.println("Thead name: "+ Thread.currentThread().getName()+" remove: "+this.item); //Para ver como se ejecutan
                this.lazylist.remove(this.item);
            }}
            
            if (this.num == 110){//Para que un hilo imprima
                
                try {
                    Thread.sleep(10); // Sleeping for 100ms
                    }
                    catch (InterruptedException e) {
                    System.out.format("Interrupted Exception: " + e.getMessage());
                    e.printStackTrace();
                    }
                    System.out.println("Here before print");
                this.lazylist.printList();
            }
            return true;
        } catch (Exception e) {
            return false;
            // TODO: handle exception
        }
    }
}
LockFreeCallable.java58 líneas

Listas/callables/LockFreeCallable.java

package callables;

import java.util.concurrent.Callable;

import lists.NonBlocking;

public class LockFreeCallable implements Callable<Boolean>{
    private String item;
    private NonBlocking locklist;//En este caso tiene como atributo a un tipo de lista LockFree
    private int num;

    public LockFreeCallable(String item, NonBlocking locklist, int num){
        this.item = item;
        this.locklist= locklist;
        this.num = num;
    }

    @Override
    public Boolean call(){
        try {
            if (this.num > 25 && this.num<100) {//Probabilidad de ejecutar contains de 75%
            this.locklist.contains(this.item);
            //System.out.println("Thead name: "+ Thread.currentThread().getName()+" contains: "+this.item);//Para ver como se ejecutan

            }
            if (this.num < 13) {//Probabilidad de ejecutar add
                //System.out.println("Thead name: "+ Thread.currentThread().getName()+" add: "+this.item);//Para ver como se ejecutan
                this.locklist.add(this.item);
            }
            else{
            if (this.num < 25){//Probabilidad de ejecutar remove
                //System.out.println("Thead name: "+ Thread.currentThread().getName()+" remove: "+this.item);//Para ver como se ejecutan
                this.locklist.remove(this.item);
            }}
            
            if (this.num == 110){//Para que un hilo imprima
                
                try {
                    Thread.sleep(1000); // Sleeping for 100ms
                    }
                    catch (InterruptedException e) {
                    System.out.format("Interrupted Exception: " + e.getMessage());
                    e.printStackTrace();
                    }
                this.locklist.printlist();
            }


            return true;
            
        } catch (Exception e) {
            return false;
            
        }
        
    }
}
Executor.java75 líneas

Listas/executor/Executor.java

package executor;

import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;

import callables.*;

import lists.*;

import text.Set;

import java.util.Random;


public class Executor{

    public static void main(String[] args) throws ExecutionException {
        
        int numProcessors = Runtime.getRuntime().availableProcessors(); // El num de procesos que tiene tu compu 
        ExecutorService executor = Executors.newFixedThreadPool(numProcessors-1);//Creamos una pool de procesos de n hilos, intenta primero con tu num de procesos

        CoarseGrained coarselist = new CoarseGrained(); //instancia de la clase
        //LazyList lazylist = new LazyList();//instancia de la clase
        //NonBlocking locklist = new NonBlocking();//instancia de la clase


        

        Random rand = new Random(); //Para crear num randoms
        Set set = new Set("alphabet");
        System.out.println("Number of operations: "+ set.numOperations()); 
        
        List<String> alphabetList = set.get();

            try {
                
                List<Future<Boolean>> futures = new ArrayList<Future<Boolean>>();
                long startTime = System.nanoTime();
                for (int i = 0; i < alphabetList.size(); i++) {//Vamos a crear distintas instancias de Tareas en el tamaño de la lista
                    int numRand = rand.nextInt(100);//Genero un numero random
                    futures.add(executor.submit(new CoarseCallable(alphabetList.get(i), coarselist,numRand))); //Para ejecutar CoarseList
                    //futures.add(executor.submit(new LazyCallable(alphabetList.get(i), lazylist,numRand))); // Para ejecutar LazyList
                    //futures.add(executor.submit(new LockFreeCallable(alphabetList.get(i), locklist,numRand))); //Para ejecutar LockFree
                }
                //CompletableFuture.anyOf(futures).join();
                
                
                for (int i = 0; i < futures.size(); i++) {
                    while(!futures.get(i).isDone());
                    //Boolean result = futures.get(i).get();
                    //System.out.printf("\n Result: "+result);
                    
                }
                
                long endTime = System.nanoTime();
                System.out.println("Program took " +
                        (endTime - startTime)* 1.0E-6 + "ms") ;
                
                
            } catch (Exception e) {
                System.out.printf("Error %s\n", e.getMessage());
            }
          
        //Future<Boolean> result = executor.submit(new CoarseCallable("non", coarselist,110));//ejecuto la tarea con num 110 que corresponde a imprimir después de 100ms para CoarseList
        //Future<Boolean> result = executor.submit(new LazyCallable("non", lazylist,110));//ejecuto la tarea con num 110 que corresponde a imprimir después de 100ms para LazyList
        //Future<Boolean> result = executor.submit(new LockFreeCallable("non", locklist,110));//ejecuto la tarea con num 110 que corresponde a imprimir después de 100ms para LockFree

        executor.shutdown();//Detengo la pool de hilos
    }
    
}
CoarseGrained.java100 líneas

Listas/lists/CoarseGrained.java

package lists;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import nodes.Node;

public class CoarseGrained {
    private Node head; //First node
    private Node tail; //Last node
  
    private Lock lock = new ReentrantLock();
  
    public CoarseGrained(){
      // Add sentinels to start and end
      head  = new Node(Integer.MIN_VALUE);
      tail  = new Node(Integer.MAX_VALUE);
      head.next = this.tail;
    }
  
    public boolean add(String item) {
      Node pred, curr;
      int key = item.hashCode();
      lock.lock();
      try {
        pred = head;
        curr = pred.next;
        while (curr.key < key) {
          pred = curr;
          curr = curr.next;
        }
        if (key == curr.key) {
          return false;
        } else {
          Node node = new Node(item);
          node.next = curr;
          pred.next = node;
          return true;
        }
      } finally {
        lock.unlock();
      }
    }

    public boolean remove(String item) {
      Node pred, curr;
      int key = item.hashCode();
      lock.lock();
      try {
        pred = this.head;
        curr = pred.next;
        while (curr.key < key) {
          pred = curr;
          curr = curr.next;
        }
        if (key == curr.key) {  // present
          pred.next = curr.next;
          return true;
        } else {
          return false;         // not present
        }
      } finally {               // always unlock
        lock.unlock();
      }
    }
    /**
     * Test whether element is present
     * @param item element to test
     * @return true iff element is present
     */
    public boolean contains(String item) {
      Node pred, curr;
      int key = item.hashCode();
      lock.lock();
      try {
        pred = head;
        curr = pred.next;
        while (curr.key < key) {
          pred = curr;
          curr = curr.next;
        }
        return (key == curr.key);
      } finally {               // always unlock
        lock.unlock();
      }
    }
  
    public void printList(){
      Node pred, curr;
      pred = this.head;
      curr = pred.next;
      System.out.println("\n ->head:"+pred.item);
      System.out.println("->"+curr.item+" key:"+curr.key);
      while (curr.next != null) {
          pred = curr;
          curr = curr.next;
          System.out.println("->"+curr.item+" key:"+curr.key);
        }
    }
    
}
LazyList.java130 líneas

Listas/lists/LazyList.java

package lists;


import nodes.NodeLazy;


public class LazyList {
    /**
   * First list Node
   */
  private NodeLazy head;
  /**
   * Constructor
   */
  public LazyList() {
    // Add sentinels to start and end
    this.head  = new NodeLazy(Integer.MIN_VALUE);
    this.head.next = new NodeLazy(Integer.MAX_VALUE);
    //System.out.println("Here___init");

  }

  /**
   * Check that prev and curr are still in list and adjacent
   */
  private boolean validate(NodeLazy pred, NodeLazy curr) {
    return  !pred.marked && !curr.marked && pred.next == curr;
  }
  /**
   * Add an element.
   * @param item element to add
   * @return true iff element was not there already
   */
  public boolean add(String item) {
    System.out.println("Here___ add");

    int key = item.hashCode();
    while (true) {
      NodeLazy pred = this.head;
      NodeLazy curr = head.next;
      while (curr.key < key) {
        pred = curr; curr = curr.next;
      }
      pred.lock();
      try {
        curr.lock();
        try {
          if (validate(pred, curr)) {
            if (curr.key == key) { // present
              return false;
            } else {               // not present
              NodeLazy Node = new NodeLazy(item);
              Node.setNext(curr);
              pred.next = Node;
              return true;
            }
          }
        } finally { // always unlock
          curr.unlock();
        }
      } finally { // always unlock
        pred.unlock();
      }
    }
  }
  /**
   * Remove an element.
   * @param item element to remove
   * @return true iff element was present
   */
  public boolean remove(String item) {
    int key = item.hashCode();
    while (true) {
      NodeLazy pred = this.head;
      NodeLazy curr = head.next;
      while (curr.key < key) {
        pred = curr; curr = curr.next;
      }
      pred.lock();
      try {
        curr.lock();
        try {
          if (validate(pred, curr)) {
            if (curr.key != key) {    // present
              return false;
            } else {                  // absent
              curr.marked = true;     // logically remove
              pred.next = curr.next;  // physically remove
              return true;
            }
          }
        } finally {                   // always unlock curr
          curr.unlock();
        }
      } finally {                     // always unlock pred
        pred.unlock();
      }
    }
  }
  /**
   * Test whether element is present
   * @param item element to test
   * @return true iff element is present
   */
  public boolean contains(String item) {
    System.out.println("Here___ contains");

    int key = item.hashCode();
    NodeLazy curr = this.head;
    while (curr.key < key)
      curr = curr.next;
    return curr.key == key && !curr.marked;
  }

  public void printList(){
    System.out.println("Here___");
    NodeLazy pred, curr;
    pred = this.head;
    curr = pred.next;
    System.out.println("\n ->head:"+pred.item);
    System.out.println("->"+curr.item+" key:"+curr.key);
    while (curr.next != null) {
      pred = curr;
      curr = curr.next;
      System.out.println("->"+curr.item+" key:"+curr.key);
      }
    }
}
NonBlocking.java119 líneas

Listas/lists/NonBlocking.java

package lists;


import nodes.NodeAtomic;
import lists.Window;

import java.util.concurrent.atomic.AtomicMarkableReference;

public class NonBlocking {
    NodeAtomic head;
    public NonBlocking(){
        this.head  = new NodeAtomic(Integer.MIN_VALUE);
        NodeAtomic tail = new NodeAtomic(Integer.MAX_VALUE);
        while (!head.next.compareAndSet(null, tail, false, false));
    }

    public boolean add(String item) {
    int key = item.hashCode();
    boolean splice;
    while (true) {
      // find predecessor and curren entries
      Window window = find(head, key);
      NodeAtomic pred = window.pred, curr = window.curr;
      // is the key present?
      if (curr.key == key) {
        return false;
      } else {
        // splice in new node
        NodeAtomic node = new NodeAtomic(item);
        node.next = new AtomicMarkableReference(curr, false);
        if (pred.next.compareAndSet(curr, node, false, false)) {
          return true;
        }
      }
    }
  }


  public boolean remove(String item) {
    int key = item.hashCode();
    boolean snip;
    while (true) {
      // find predecessor and curren entries
      Window window = find(head, key);
      NodeAtomic pred = window.pred, curr = window.curr;
      // is the key present?
      if (curr.key != key) {
        return false;
      } else {
        // snip out matching node
        NodeAtomic succ = curr.next.getReference();
        snip = curr.next.attemptMark(succ, true);
        if (!snip)
          continue;
        pred.next.compareAndSet(curr, succ, false, false);
        return true;
      }
    }
  }

  public boolean contains(String item) {
    int key = item.hashCode();
    // find predecessor and curren entries
    Window window = find(head, key);
    NodeAtomic pred = window.pred, curr = window.curr;
    return (curr.key == key);
  }

   /**
   * If element is present, returns node and predecessor. If absent, returns
   * node with least larger key.
   * @param head start of list
   * @param key key to search for
   * @return If element is present, returns node and predecessor. If absent, returns
   * node with least larger key.
   */
  public Window find(NodeAtomic head, int key) {
    NodeAtomic pred = null, curr = null, succ = null;
    boolean[] marked = {false}; // is curr marked?
    boolean snip;
    retry: while (true) {
      pred = head;
      curr = pred.next.getReference();
      while (true) {
        succ = curr.next.get(marked); 
        while (marked[0]) {           // replace curr if marked
          snip = pred.next.compareAndSet(curr, succ, false, false);
          if (!snip) continue retry;
          curr = pred.next.getReference();
          succ = curr.next.get(marked);
        }
        if (curr.key >= key)
          return new Window(pred, curr);
        pred = curr;
        curr = succ;
      }
    }
  }

  public void printlist() {
    NodeAtomic pred, curr;
    pred = this.head;
    curr = pred.next.getReference();
    System.out.println("\n ->head:"+pred.item);
    //System.out.println("->"+curr.item+" key:"+curr.key);
    while (curr.next.getReference() != null) {
        curr = pred.next.getReference();
        //succ = curr.next.get(marked);
        System.out.println("->"+curr.item+" key:"+curr.key);
        
        pred = curr;
        //curr = succ;
    }
    //}
  }

 
}
Window.java15 líneas

Listas/lists/Window.java

package lists;

import nodes.NodeAtomic;


public class Window {
    public NodeAtomic pred;
    public NodeAtomic curr;

    public Window(NodeAtomic pred, NodeAtomic curr) {
      this.pred = pred; this.curr = curr;
    }
}
  
Node.java30 líneas

Listas/nodes/Node.java

package nodes;

public class Node {
    public String item;
    /**
     * item's hash code
     */
    public int key;
    /**
     * next Node in list
     */
    public Node next;
    /**
     * Constructor for usual Node
     * @param item element in list
     */
    public Node(String item) {
      this.item = item;
      this.key = item.hashCode();
    }
    /**
     * Constructor for sentinel Node
     * @param key should be min or max int value
     */
    public Node(int key) {
      this.item = null;
      this.key = key;
    }
}
NodeAtomic.java39 líneas

Listas/nodes/NodeAtomic.java

package nodes;


import java.util.concurrent.atomic.AtomicMarkableReference;

public class NodeAtomic {
    /**
     * actual item
     */
    public String item;
    /**
     * item's hash code
     */
    public int key;
    /**
     * next node in list
     */
    public AtomicMarkableReference<NodeAtomic> next;
    /**
     * Constructor for usual node
     * @param item element in list
     */
    public NodeAtomic(String item) {      // usual constructor
      this.item = item;
      this.key = item.hashCode();
      this.next = new AtomicMarkableReference<NodeAtomic>(null, false);
    }
    /**
     * Constructor for sentinel node
     * @param key should be min or max int value
     */
    public NodeAtomic(int key) { // sentinel constructor
      this.item = null;
      this.key = key;
      this.next = new AtomicMarkableReference<NodeAtomic>(null, false);
    }
}
NodeLazy.java64 líneas

Listas/nodes/NodeLazy.java

package nodes;


import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class NodeLazy {
      /**
     * actual item
     */
    public String item;
    /**
     * item's hash code
     */
    public int key;
    /**
     * next Node in list
     */
    public NodeLazy next;
    /**
     * If true, Node is logically deleted.
     */
    public boolean marked;
    /**
     * Synchronizes Node.
     */
    public Lock lock;
    /**
     * Constructor for usual Node
     * @param item element in list
     */
    public NodeLazy(String item) {      // usual constructor
      this.item = item;
      this.key = item.hashCode();
      this.next = null;
      this.marked = false;
      this.lock = new ReentrantLock();
    }
    /**
     * Constructor for sentinel Node
     * @param key should be min or max int value
     */
    public NodeLazy(int key) { // sentinel constructor
      this.item = null;
      this.key = key;
      this.next = null;
      this.marked = false;
      this.lock = new ReentrantLock();
    }

    public void setNext(NodeLazy ref){
      this.next = ref;
    }
    /**
     * Lock Node
     */
    public void lock() {lock.lock();}
    /**
     * Unlock Node
     */
    public void unlock() {lock.unlock();}
}
Set.java293 líneas

Listas/text/Set.java

package text;

import java.util.Arrays;
import java.util.List;

public class Set {
    String name;
    int size;
    String[] items = {"a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r",
        "s","t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i",
        "a","e","i","o","u","e","o","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i","o","u","e","o","j","h","l","p","o","r","s",
        "t","u","v","w","x","y","z","k","e","o","j","h","l","p","o","r","s","j","h","l","p","o","r","s","t","u","v","w","x","y","z","a","e","i"};

    public Set(String name){
        this.name = name;
        this.size = Arrays.asList(this.items).size();
    }
    public List<String> get(){
        return Arrays.asList(this.items);
    }

    public int numOperations(){
        return this.size;
    }
}