import java.util.ArrayList;
import java.util.List;

public class ImpGraph extends AbstractGraph {
	private final List<List<Integer>> edges;
	
/*  n number of nodes
 *  l number of letters
 */
	public ImpGraph(int n, int l){
		edges = new ArrayList<List<Integer>>();
		for (int c = 0; c < l; c++) {
			edges.add(new ArrayList<Integer>());
		}
		for (int c = 0; c < l; c++) {
			for (int i= 0; i < n; i++) {
			  edges.get(c).add(0);
			}
		}
	}
	
	public List<List<Integer>> getEdges() {
		return edges;
	}

	public int size(){
		return edges.get(0).size();
	}
	
	public int arity(){
		return edges.size();
	}
	
	public int succ(int x, int c){
	    return edges.get(c).get(x);
	 }

	 @Override 
	public String toString() {
			StringBuilder sb = new StringBuilder();
			for (int c = 0; c < arity(); c ++){
			    sb.append("Transition ");
			    sb.append(c);
			    sb.append("\n");
			    for (int i = 0; i < size(); i++) {
		    		sb.append(String.format("%4d",i));
		    	}
			    sb.append("\n");
			    for (int x : edges.get(c)) {
	    		  sb.append(String.format("%4d",x));
			    }
			    sb.append("\n");
			}
	    	return sb.toString();  
	 }
}