##################################
#                                #
# Last modified 11/03/2013       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import string
import math
from sets import Set
import os
import subprocess

def run():

    if len(sys.argv) < 3:
        print 'usage: python %s input minReadLength maxReadLength'
        print '\tthe script will print to stdout by default, use - for stdin'
        sys.exit(1)

    fastq = sys.argv[1]
    minReadLength = int(sys.argv[2])
    maxReadLength = int(sys.argv[3])

    doStdInput = False
    if fastq == '-':
        doStdInput = True

    if doStdInput:
        lineslist  = sys.stdin
    else:
        lineslist  = open(fastq)
    pos=1
    for line in lineslist:
        if pos==1:
            read={}
            if line.startswith('@'):
                pass
            else:
                print 'fastq file format broken, exiting'
                print pos, i, line.strip()
                sys.exit(1)
            read['ID']=line.strip()
            pos=2
            continue
        if pos==2:
            read['sequence']=line.strip()
            pos=3
            continue
        if pos==3:
            if line.startswith('+'):
                pass
            else:
                print 'fastq file format broken, exiting'
                print pos, i, line.strip()
                sys.exit(1)
            pos=4
            continue
        if pos==4:
            read['QualityScores']=line.strip()
            pos=1
            if (len(read['sequence']) >= minReadLength) and (len(read['sequence']) <= maxReadLength):
                print read['ID']
                print read['sequence']
                print '+'
                print read['QualityScores']
            else:
                continue
        
run()