Sure, I can help you generate test cases for the given problem statement. Below is the Python code to generate test cases:

```python
import random
import string

def random_string(length):
    letters = string.ascii_lowercase
    return ''.join(random.choice(letters) for i in range(length))

def tcgen():
    q = random.randint(1, 200000)  # Number of queries

    queries = []
    keys = set()
    
    for _ in range(q):
        operation = random.randint(0, 3)
        if operation == 0:  # insert operation
            key = random_string(random.randint(1, 20))
            while key in keys:  # Ensure unique keys
                key = random_string(random.randint(1, 20))
            keys.add(key)
            x = random.randint(1, 1000000000)
            queries.append(f"0 {key} {x}")
        elif operation == 1:  # get operation
            if keys:
                key = random.choice(list(keys))
            else:
                key = random_string(random.randint(1, 20))
            queries.append(f"1 {key}")
        elif operation == 2:  # delete operation
            if keys:
                key = random.choice(list(keys))
                keys.remove(key)
            else:
                key = random_string(random.randint(1, 20))
            queries.append(f"2 {key}")
        elif operation == 3:  # dump operation
            L = random_string(random.randint(1, 20))
            R = random_string(random.randint(1, 20))
            if L > R:
                L, R = R, L  # Ensure L is lexicographically less than or equal to R
            queries.append(f"3 {L} {R}")

    return q, queries

# Example usage:
q, queries = tcgen()
print(q)
for query in queries:
    print(query)
```

### Explanation:

1. **Random String Generation**: The `random_string` function generates random strings of a given length from lowercase English letters.

2. **Number of Queries**: The number of queries `q` is randomly chosen between 1 and 200,000.

3. **Query Generation**:
    - **Insert Operation (0)**: If the operation is 0, it generates a unique random key and a random integer value between 1 and 1,000,000,000.
    - **Get Operation (1)**: For the get operation, it either picks a key from the existing set of keys or generates a random key.
    - **Delete Operation (2)**: For the delete operation, it picks an existing key (if any) to delete or generates a random key.
    - **Dump Operation (3)**: It generates two random strings L and R, and ensures L is lexicographically less than or equal to R.

4. **Output**: The function returns the number of queries and the list of queries in the specified format.

You can use the example usage provided at the end to generate and print a set of test cases. Adjust the ranges and constraints as necessary to fit your testing needs.