Let be a connected, directed graph with vertices numbered from to such that any vertex is reachable from vertex . In addition, any two distinct vertices, and , are connected by at most one edge .
Consider the standard DFS (Depth-First Search) algorithm starting from vertex . As every vertex is reachable, each edge of is classified by the algorithm into one of four groups:
- tree edge: If was discovered for the first time when we traversed .
 - back edge: If was already on the stack when we tried to traverse .
 - forward edge: If was already discovered while was on the stack.
 - cross edge: Any edge that is not a tree, back, or forward edge.
 
To better understand this, consider the following C++ pseudocode:
// initially false
bool discovered[n]; 
// initially false
bool finished[n];   
vector<int> g[n];
void dfs(int u) {
    // u is on the stack now
    discovered[u] = true;
    for (int v: g[u]) {
        if (finished[v]) {
            // forward edge if u was on the stack when v was discovered
            // cross edge otherwise
            continue;
        }
        if (discovered[v]) {
            // back edge
            continue;
        }
        // tree edge
        dfs(v);
    }
    finished[u] = true;
    // u is no longer on the stack
}
Given four integers, , , , and , construct any graph having exactly tree edges, exactly back edges, exactly forward edges, and exactly cross edges. Then print according to the Output Format specified below.
Input Format
A single line of four space-separated integers describing the respective values of , , , and .
Constraints
Output Format
If there is no such graph , print -1; otherwise print the following:
- The first line must contain an integer, , denoting the number of vertices in .
 - Each line  of the  subsequent lines must contain the following space-separated integers:
- The first integer is the outdegree, , of vertex .
 - This is followed by distinct numbers, , denoting edges from to for . The order of each should be the order in which a DFS considers edges.
 
 
Sample Input 0
3 1 1 1
Sample Output 0
4
3 2 4 3
1 3
1 1
1 2
Explanation 0
The DFS traversal order is: . Thus, , and are tree edges; is a back edge; is a forward edge; and is a cross edge. This is demonstrated by the diagram below, in which tree edges are black, forward edges are blue, back edges are red, and cross edges are green.

Sample Input 1
1 10 20 30
Sample Output 1
-1
Explanation 1
No such graph exists satisfying the given values.