MVSFORUMS.com Forum Index MVSFORUMS.com
A Community of and for MVS Professionals
 
 FAQFAQ   SearchSearch   Quick Manuals   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Sort Challenge II - Horizontal Sorting.
Goto page 1, 2  Next
 
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Mainframe Challenge
View previous topic :: View next topic  
Author Message
Phantom
Data Mgmt Moderator
Data Mgmt Moderator


Joined: 07 Jan 2003
Posts: 1056
Topics: 91
Location: The Blue Planet

PostPosted: Sun Dec 12, 2004 2:43 am    Post subject: Sort Challenge II - Horizontal Sorting. Reply with quote

Hi all.

Here is one more sort Challenge. As usual the solution could be in any sort product (Dfsort / Syncsort / CA Sort). The solution will be published on Tuesday (12/14/04).

I have a input file which is sorted on the Key (first 3 characters).

Input:
Code:
 
AAA   OAO
BBB   WSS
CCC   OWD
DDD   ZYS
EEE   FGH
FFF   ZYS
GGG   HKJ


Now I need to do the following. For each record, I need to position the last three characters in ascending order. that is, the expected output is

All I need to do is to sort HORIZONTALLY.
Code:

AAA   AOO
BBB   SSW
CCC   DOW
DDD   SYZ
EEE   FGH
FFF   SYZ
GGG   HJK


As usual this should be accomplished in least no. of passes.

NOTE: The code should work even if it has duplicates in the 7-9 column. See the first 2 rows in input.

Good Luck !

Thanks,
Phantom
Back to top
View user's profile Send private message
Phantom
Data Mgmt Moderator
Data Mgmt Moderator


Joined: 07 Jan 2003
Posts: 1056
Topics: 91
Location: The Blue Planet

PostPosted: Sun Dec 12, 2004 2:51 am    Post subject: Reply with quote

Hi All,

As 'Ravi' said in his note below, it would be nice for everyone to try their own logic instead of getting distracted by other's solution.
http://www.mvsforums.com/helpboards/viewtopic.php?t=2260

I would suggest everyone to send your solutions as a Private Message to Me (Phantom). I will disclose all the solutions on the final date (12/14).

Suggestions are welcome !.

Thanks,
Phantom
Back to top
View user's profile Send private message
Frank Yaeger
Sort Forum Moderator
Sort Forum Moderator


Joined: 02 Dec 2002
Posts: 1618
Topics: 31
Location: San Jose

PostPosted: Sun Dec 12, 2004 11:47 am    Post subject: Reply with quote

Phantom,

This same question was posted in the yahoo group the other day and I answered it with a DFSORT/ICETOOL solution. Coincidence?

Anyway, I'll play along and send you my DFSORT/ICETOOL solution via private message.

BTW, the input record for DDD is:

DDD ZYS

so the output record for DDD should be:

DDD SYZ

instead of:

DDD XYZ

as you show.
_________________
Frank Yaeger - DFSORT Development Team (IBM)
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
DFSORT is on the Web at:
www.ibm.com/storage/dfsort
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Frank Yaeger
Sort Forum Moderator
Sort Forum Moderator


Joined: 02 Dec 2002
Posts: 1618
Topics: 31
Location: San Jose

PostPosted: Sun Dec 12, 2004 1:36 pm    Post subject: Reply with quote

I also just remembered that there was a similar question on other board the other day that I responded to with a DFSORT/ICETOOL solution as well. I guess this is more of a "real" question than merely a made-up challenge.
_________________
Frank Yaeger - DFSORT Development Team (IBM)
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
DFSORT is on the Web at:
www.ibm.com/storage/dfsort
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Phantom
Data Mgmt Moderator
Data Mgmt Moderator


Joined: 07 Jan 2003
Posts: 1056
Topics: 91
Location: The Blue Planet

PostPosted: Sun Dec 12, 2004 11:12 pm    Post subject: Reply with quote

Frank,

Quote:

This same question was posted in the mvsquest yahoo group.


Interesting....I'm registered only in MVSFORUMS. Actually my colleague asked me this question. He said he need to do this horizontal sorting for one of his projects request. I'm not sure whether he is registered in the other group.

Anyway, it was nice to see your message. If I'm correct, Its been quite some time since you posted one. Thanks a lot.

I will get back with all the solutions either on Tuesday / Wednesday, depending on the response.

Thanks,
Phantom
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12375
Topics: 75
Location: San Jose

PostPosted: Mon Dec 13, 2004 5:59 am    Post subject: Reply with quote

Quote:

AAA AOO
BBB SSW
CCC DOW
DDD XYZ
EEE FGH
FFF SYZ
GGG HJK


Phantom,

Where is this X coming from? The input has "ZYS" for the DDD record. when sorted it would be "SYZ". was it a typo?

Kolusu
_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Phantom
Data Mgmt Moderator
Data Mgmt Moderator


Joined: 07 Jan 2003
Posts: 1056
Topics: 91
Location: The Blue Planet

PostPosted: Mon Dec 13, 2004 6:28 am    Post subject: Reply with quote

Frank & Kolusu,

Yes, That was a typo. It should be 'SYZ'. Could you please correct my original post.

Thanks a lot.
Phantom

Edit by the moderator : Corrected the orginal post to reflect the change.
Back to top
View user's profile Send private message
Frank Yaeger
Sort Forum Moderator
Sort Forum Moderator


Joined: 02 Dec 2002
Posts: 1618
Topics: 31
Location: San Jose

PostPosted: Mon Dec 13, 2004 10:22 am    Post subject: Reply with quote

Hmmm ... maybe all of these guys have the same project. Quite possible. I see that a lot on some of the boards (5 guys will all ask the same question in one day).

Quote:
Anyway, it was nice to see your message. If I'm correct, Its been quite some time since you posted one.


Well, I don't post as often on this board as I do on the other 3 boards I participate in, since Kolusu usually handles all the questions I would answer here before I get to work in California. But I have posted reasonably frequently here.

I don't usually post to the Mainframe Challenge topic. It's a good idea. But with all of the "real" questions I get on the other boards and through direct e-mail, I tend to pass on "made-up" questions. I only sent you an answer for this one because I already had the answer. Smile
_________________
Frank Yaeger - DFSORT Development Team (IBM)
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
DFSORT is on the Web at:
www.ibm.com/storage/dfsort
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Phantom
Data Mgmt Moderator
Data Mgmt Moderator


Joined: 07 Jan 2003
Posts: 1056
Topics: 91
Location: The Blue Planet

PostPosted: Wed Dec 15, 2004 6:00 am    Post subject: Reply with quote

Hi All,

Its time to release the solutions.

Solution 1: From Frank.
Code:

//S1 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN DD *
AAA   OAO
BBB   WSS
CCC   OWD
DDD   ZYS
EEE   FGH
FFF   ZYS
GGG   HKJ
/*
//T1 DD DSN=&&T1,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(,PASS)
//OUT DD SYSOUT=*
//TOOLIN DD *
* IN->T1: Split each input record that looks like this
* (cba represents random order):
* kkk   cba
* into three output records that look like this:
* kkk   ccc
* kkk   bbb
* kkk   aaa
COPY FROM(IN) USING(CTL1)
* Sort by kkk and the first character of cba to get the
* records in the correct order (represented by abc). Then
* join the three records back into one record of the form:
* kkk   abc
SPLICE FROM(T1) TO(OUT) ON(1,3,CH) -
WITHEACH WITH(8,1) WITH(9,1) USING(CTL2)
/*
//CTL1CNTL DD *
* Split each record into three records.
  OUTFIL FNAMES=T1,
   OUTREC=(1,3,7:7,1,7,1,7,1,80:X,/,
     1,3,7:8,1,8,1,8,1,/,
     1,3,7:9,1,9,1,9,1)
/*
//CTL2CNTL DD *
* Sort by kkk and the first character of cba.
  OPTION EQUALS
  SORT FIELDS=(1,3,CH,A,7,1,CH,A)
/*


Comments:
This solutions requires 1 Step 1 Temp file & 2 Pass. A Simple, Generic & Efficient Solution

Solution 2: From Kolusu
Code:

//STEP0100 EXEC PGM=SYNCTOOL
//DFSMSG   DD SYSOUT=*                                   
//TOOLMSG  DD SYSOUT=*                                   
//IN       DD *                                         
AAA   OAO                                               
BBB   WSS                                               
CCC   OWD                                               
DDD   ZYS                                               
EEE   FGH                                               
FFF   ZYS                                               
GGG   HKJ                                               
//T1       DD DSN=&T1,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//OUT      DD SYSOUT=*                                   
//TOOLIN   DD *                                         
  COPY FROM(IN) USING(CTL1)                             
  SPLICE FROM(T1) TO(OUT) ON(1,6,CH) -                   
     WITHEACH WITH(8,1) WITH(9,1) USING(CTL2)           
//CTL1CNTL DD *                                         
  OUTFIL FNAMES=T1,                                     
  OUTREC=(1,6,7,1,7,1,7,1,/,                             
          1,6,8,1,8,1,8,1,/,                             
          1,6,9,1,9,1,9,1)                               
//CTL2CNTL DD *                                         
  SORT FIELDS=(1,6,CH,A,7,1,CH,A)                       
/*                             


Comments:
Basically same as the first Solution 1 (A Syncsort Version). The only constraint here is you need a latest version of SYNCSORT to work with SPLICE.

Solution 3: Again From Kolusu
Code:

//STEP0100 EXEC PGM=SYNCTOOL
//DFSMSG   DD SYSOUT=*                                   
//TOOLMSG  DD SYSOUT=*                                   
//IN       DD *                                         
AAA   OAO                                               
BBB   WSS                                               
CCC   OWD                                               
DDD   ZYS                                               
EEE   FGH                                               
FFF   ZYS                                               
GGG   HKJ                                               
//T1       DD DSN=&T1,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//T2       DD DSN=&T2,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//OUT      DD SYSOUT=*                                   
//TOOLIN   DD *                                         
  COPY FROM(IN) USING(CTL1)                             
  SORT FROM(T1) USING(CTL2)                             
  SORT FROM(T2) USING(CTL3)                             
//CTL1CNTL DD *                                         
  OUTFIL FNAMES=T1,                                     
  OUTREC=(1,6,7,1,/,                                     
          1,6,8,1,/,                                     
          1,6,9,1,80:X)                                 
//CTL2CNTL DD *                                         
  SORT FIELDS=(1,6,CH,A,7,1,CH,A)                       
  OUTREC FIELDS=(1,80,SEQNUM,8,ZD,START=4)               
  OUTFIL FNAMES=T2,                                     
  OUTREC=(1,80,                                         
          81,8,ZD,SUB,(+3,MUL,(81,8,ZD,DIV,+3)),EDIT=(T))
//CTL3CNTL DD *                                 
  INREC FIELDS=(1,6,                           
                7:81,1,CHANGE=(1,X'F0',X'00',   
                                 X'F2',X'00'), 
                    NOMATCH=(7,1),             
                8:81,1,CHANGE=(1,X'F0',X'00',   
                                 X'F1',X'00'), 
                    NOMATCH=(7,1),             
                9:81,1,CHANGE=(1,X'F1',X'00',   
                                 X'F2',X'00'), 
                    NOMATCH=(7,1),Z,80:X)       
  SORT FIELDS=(1,3,CH,A)                       
  SUM FIELDS=(7,4,BI)                           
  OUTFIL FNAMES=OUT,                           
  OUTREC=(1,9,80:X)                             
/*


Comments:
The Traditional way !!! - w/o SPLICE. This solution requires 1 Step 2 Temp Files & 3 Passes. A simple, Generic & very efficient solution.
Solution 4: From Me (Phantom)
Code:

//R010    EXEC PGM=SYNCTOOL                                   
//TOOLMSG   DD SYSOUT=*                                       
//DFSMSG    DD SYSOUT=*                                       
//INPUT     DD *                                             
AAA   ZSS                                                     
BBB   JKJ                                                     
CCC   OWD                                                     
DDD   ZYX                                                     
EEE   FGH                                                     
FFF   OOO                                                     
GGG   PPS                                                     
HHH   ZZZ                                                     
/*                                                           
//TEMP1     DD DSN=&&T1,DISP=(,PASS)                         
//OUTPUT    DD SYSOUT=*                                       
//TOOLIN    DD *                                             
  COPY FROM(INPUT) TO(TEMP1)  USING(CTL1)                     
  SORT FROM(TEMP1) TO(OUTPUT) USING(CTL2)                     
/*                                                           
//CTL1CNTL  DD *                                             
  OUTREC FIELDS=(1,10,7,1,BI,MIN,8,1,BI,MIN,9,1,BI,BI,LENGTH=1,   
                      2Z,                                         
                      7,1,BI,MAX,8,1,BI,MAX,9,1,BI,BI,LENGTH=1)   
  OUTFIL OUTREC=(1,14,2X,C'0',80:X,/,                             
                 1,9,3Z,7,1,1Z,11,1,14,1,C'1',80:X,/,             
                 1,9,3Z,8,1,1Z,11,1,14,1,C'1',80:X,/,             
                 1,9,3Z,9,1,1Z,11,1,14,1,C'1',80:X)               
/*                                                                 
//CTL2CNTL  DD *                                                   
  INCLUDE COND=(13,1,CH,EQ,X'00',OR,                               
                (13,1,CH,NE,15,1,CH,AND,                           
                 13,1,CH,NE,16,1,CH),OR,                           
                 (7,1,CH,EQ,8,1,CH,AND,7,1,CH,EQ,13,1,CH),OR,     
                 (7,1,CH,EQ,9,1,CH,AND,7,1,CH,EQ,13,1,CH),OR,     
                 (8,1,CH,EQ,9,1,CH,AND,8,1,CH,EQ,13,1,CH))         
  SORT FIELDS=(1,9,CH,A)                                           
  SUM FIELDS=(12,2,BI,17,1,ZD)                                     
  OUTREC FIELDS=(1,6,11,1,(12,2,BI,DIV,17,1,ZD),EDIT=(TTTT),14,1) 
  OUTFIL OUTREC=(1,7,8,4,ZD,BI,LENGTH=1,12,1)                     
/*                                                     


Comments:
This one takes only 1 Step & Just 2 pass even without SPLICE 8) . Its generic too...but it LOSES Points since it is a bit too Complex Crying or Very sad

Solution 5: From my Friend & revised by Me
Code:

//R010  EXEC PGM=SORT                                                 
//SYSPRINT DD SYSOUT=*                                                 
//SORTIN DD  *                                                         
AAA   OAO                                                             
BBB   WSS                                                             
CCC   OWD                                                             
DDD   ZYS                                                             
EEE   FGH                                                             
FFF   ZYS                                                             
GGG   HKJ                                                             
/*                                                                     
//SORTOUT DD SYSOUT=*                                                 
//SYSIN DD *                                                           
     INREC FIELDS=(1,6,7,3,                                           
                   7,1,BI,MIN,8,1,BI,MIN,9,1,BI,BI,LENGTH=1,  * MIN * 
                   7,1,BI,MAX,8,1,BI,MAX,9,1,BI,BI,LENGTH=1)  * MAX * 
     SORT FIELDS=COPY                                                 
     OUTREC FIELDS=(1,3,3X,                                           
                    10,1,                                 * MIN       *
                    ((7,1,BI,ADD,8,1,BI,ADD,9,1,BI),SUB,  *(TOTAL -   *
                     (10,1,BI,ADD,11,1,BI)),BI,LENGTH=1,  * MIN + MAX)*
                    11,1)                                 * MAX       *
//SYSOUT DD SYSOUT=*                                                   
//                     


Comments:
Simplest of All. Requires Just 1 Step & 1 Pass. 8) But the only drawback of this is that it is not GENERIC. Sad It won't work if the no. of characters is more than 3. But that wasn't part of challenge though. Wink

Any Comments/Suggestions are Welcome !

If any of you have a different solution please feel free to post.

Thanks,
Phantom
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12375
Topics: 75
Location: San Jose

PostPosted: Wed Dec 15, 2004 8:57 am    Post subject: Reply with quote

Phantom,

You forgot to post the solution of overriding the LRECL solution which I sent you offline

Here is that solution:
Code:

//STEP0100 EXEC PGM=SORT                                     
//SYSOUT    DD SYSOUT=*                                     
//SORTIN    DD *                                             
AAA   OAO                                                   
BBB   WSS                                                   
CCC   OWD                                                   
DDD   ZYS                                                   
EEE   FGH                                                   
FFF   ZYS                                                   
GGG   HKJ                                                   
//SORTOUT   DD DSN=&L1,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE), 
//             DCB=(RECFM=FB,LRECL=21,BLKSIZE=27993)         
//SYSIN     DD *                                             
  SORT FIELDS=COPY                                           
  OUTREC FIELDS=(1,6,7,1,                                     
                 1,6,8,1,                                     
                 1,6,9,1)                                     
//*     
//STEP0200 EXEC PGM=SORT                                   
//SYSOUT    DD SYSOUT=*                                   
//SORTIN    DD DSN=&L1,DISP=(OLD,PASS),LRECL=7             
//SORTOUT   DD DSN=&L2,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE),
//             DCB=(RECFM=FB,LRECL=7,BLKSIZE=27993)       
//SYSIN     DD *                                           
  SORT FIELDS=(1,6,CH,A,7,1,CH,A)                           
//*                                                       
//STEP0300 EXEC PGM=SORT                                   
//SYSOUT    DD SYSOUT=*                                   
//SORTIN    DD DSN=&L2,DISP=(OLD,PASS),LRECL=21           
//SORTOUT   DD SYSOUT=*,                                   
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)           
//SYSIN     DD *                                           
  SORT FIELDS=COPY                                         
  OUTREC FIELDS=(1,6,7,1,14,1,21,1,80:X)                   
//*           


Kolusu
_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Phantom
Data Mgmt Moderator
Data Mgmt Moderator


Joined: 07 Jan 2003
Posts: 1056
Topics: 91
Location: The Blue Planet

PostPosted: Wed Dec 15, 2004 9:09 am    Post subject: Reply with quote

Oh yes....I'm sorry about that. I had lots of messages in my Inbox. Somehow your solution went into the cracks !!!

Thanks,
Phantom
Back to top
View user's profile Send private message
Frank Yaeger
Sort Forum Moderator
Sort Forum Moderator


Joined: 02 Dec 2002
Posts: 1618
Topics: 31
Location: San Jose

PostPosted: Fri Dec 17, 2004 1:18 pm    Post subject: Reply with quote

Quote:
If any of you have a different solution please feel free to post.



I had this one up my sleeve the whole time, but I couldn't post it until today when the new DFSORT PTFs were available.

Below is a DFSORT solution with one copy pass and only one INREC statement. It uses the new IFTHEN feature available with z/OS DFSORT V1R5 PTF UQ95214 and DFSORT R14 PTF UQ95213.

I ran a performance test with DFSORT of this IFTHEN method vs Phantom's MIN/MAX method using 5 million records and the IFTHEN method ran 3.5 times faster (CPU time).

Code:

//S1 EXEC PGM=ICEMAN
//SYSOUT DD SYSOUT=*
//SYMNAMES DD *
FRONT,1,6,CH
C1,*,1,CH
C2,*,1,CH
C3,*,1,CH
//SORTIN DD DSN=...  input file
//SORTOUT DD DSN=...  output file
//SYSIN DD *
  OPTION COPY
  INREC IFTHEN=(WHEN=(C1,LE,C2,AND,C1,LE,C3,AND,C2,GE,C3),
          BUILD=(FRONT,C1,C3,C2)),
        IFTHEN=(WHEN=(C1,GE,C2,AND,C1,LE,C3,AND,C2,LE,C3),
          BUILD=(FRONT,C2,C1,C3)),
        IFTHEN=(WHEN=(C1,LE,C2,AND,C1,GE,C3,AND,C2,GE,C3),
          BUILD=(FRONT,C3,C1,C2)),
        IFTHEN=(WHEN=(C1,GE,C2,AND,C1,GE,C3,AND,C2,LE,C3),
          BUILD=(FRONT,C2,C3,C1)),
        IFTHEN=(WHEN=(C1,GE,C2,AND,C1,GE,C3,AND,C2,GE,C3),
          BUILD=(FRONT,C3,C2,C1)),
        IFOUTLEN=9
/*


For complete information on the new functions available with these DFSORT PTFs, see:

http://www.ibm.com/servers/storage/support/software/sort/mvs/pdug/index.html

You could extend this solution to more than 3 characters by coding up the appropriate IFTHEN statements, although the more characters you do the more IFTHEN statements you would need and the more complex it would become to figure out what they were. I think extendability is the main virtue of the SPLICE solution I offered, although it's obviously nowhere near as efficient as this one pass solution with IFTHEN.
_________________
Frank Yaeger - DFSORT Development Team (IBM)
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
DFSORT is on the Web at:
www.ibm.com/storage/dfsort
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Phantom
Data Mgmt Moderator
Data Mgmt Moderator


Joined: 07 Jan 2003
Posts: 1056
Topics: 91
Location: The Blue Planet

PostPosted: Sat Dec 18, 2004 12:01 am    Post subject: Reply with quote

Frank,

Code:

I ran a performance test with DFSORT of this IFTHEN method vs Phantom's MIN/MAX method using 5 million records and the IFTHEN method ran 3.5 times faster (CPU time).


You are toooo Bad.....Now you make me Cry Crying or Very sad Crying or Very sad Crying or Very sad

I wanna explore the features of DFSORT !!!!!!!!!!!!!!!..........

Frank, Could you pls forward my CV to ur HR ...Probably I'll join ur team.... Wink

Thanks,
Phantom
Back to top
View user's profile Send private message
Frank Yaeger
Sort Forum Moderator
Sort Forum Moderator


Joined: 02 Dec 2002
Posts: 1618
Topics: 31
Location: San Jose

PostPosted: Sat Dec 18, 2004 11:33 am    Post subject: Reply with quote

Phantom,

Don't cry - convince your management to switch! I'd be glad to send you some documents that might help you convince them if you e-mail me (yaeger@us.ibm.com).
_________________
Frank Yaeger - DFSORT Development Team (IBM)
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
DFSORT is on the Web at:
www.ibm.com/storage/dfsort
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Alain Benveniste
Beginner


Joined: 04 May 2003
Posts: 92
Topics: 4
Location: Paris, France

PostPosted: Thu Dec 23, 2004 1:28 pm    Post subject: Reply with quote

I would have liked to take part in this challenge; unfortunately Iarrive a little too late
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Mainframe Challenge All times are GMT - 5 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


MVSFORUMS
Powered by phpBB © 2001, 2005 phpBB Group