A format for expressing an ordered list of integers is to use a comma separated list of either

 individual integers
 Or a range of integers denoted by the starting integer separated from the end integer in the range by a dash, '-'. (The range includes all integers in the interval including both endpoints)
 The range syntax is to be used only for, and for every range that expands to more than two values.
Example

The list of integers:

 -6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20
Is accurately expressed by the range expression:

 -6,-3-1,3-5,7-11,14,15,17-20
(And vice-versa).



Task

Expand the range description:

  -6,-3--1,3-5,7-11,14,15,17-20 

Note that the second element above,
is the range from minus 3 to minus 1. 



Related task

   Range extraction


BYTE FUNC Find(CHAR ARRAY text CHAR c BYTE start)
  BYTE i
 
  i=start
  WHILE i<=text(0)
  DO
    IF text(i)=c THEN
      RETURN (i)
    FI
    i==+1
  OD
RETURN (0)
 
PROC ProcessItem(CHAR ARRAY text INT ARRAY res INT POINTER size)
  BYTE pos
  INT start,end,i
  CHAR ARRAY tmp(200)
 
  pos=Find(text,'-,2)
  IF pos=0 THEN   
    res(size^)=ValI(text)
    size^==+1
  ELSE
    SCopyS(tmp,text,1,pos-1)
    start=ValI(tmp)
    SCopyS(tmp,text,pos+1,text(0))
    end=ValI(tmp)
    FOR i=start TO end
    DO
      res(size^)=i
      size^==+1
    OD
  FI
RETURN
 
PROC RangeExtraction(CHAR ARRAY text INT ARRAY res INT POINTER size)
  BYTE i,pos
  CHAR ARRAY tmp(200)
 
  i=1 size^=0
  WHILE i<=text(0)
  DO
    pos=Find(text,',,i)
    IF pos=0 THEN
      SCopyS(tmp,text,i,text(0))
      i=text(0)+1
    ELSE
      SCopyS(tmp,text,i,pos-1)
      i=pos+1
    FI
    ProcessItem(tmp,res,size)
  OD
RETURN
 
PROC PrintArray(INT ARRAY a INT size)
  INT i
 
  Put('[)
  FOR i=0 TO size-1
  DO
    IF i>0 THEN Put(' ) FI
    PrintI(a(i))
  OD
  Put(']) PutE()
RETURN
 
PROC Main()
  INT ARRAY res(100)
  INT size
  RangeExtraction("-6,-3--1,3-5,7-11,14,15,17-20",res,@size)
  PrintArray(res,size)
RETURN