Enumerate all palindromic numbers (in decimal) between 0 and n

11

1

Given a non-negative integer n, enumerate all palindromic numbers (in decimal) between 0 and n (inclusive range). A palindromic number remains the same when its digits are reversed.

The first palindromic numbers (in base 10) are given here:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191, 202, 212, 222, 232, 242, 252, 262, 272, 282, 292, 303, 313, 323, 333, 343, 353, 363, 373, 383, 393, 404, 414, 424, 434, 444, 454, 464, 474, 484, 494, 505, 515, ...

This is a code golf with the prize going to fewest characters. The palindromic numbers should be output one per line to stdout. The program should read n from the commandline or stdin.

Wok

Posted 2011-08-23T09:59:55.510

Reputation: 304

3Between 1 and n (as per title) or 0 and n (as per body)? And which of the bounds does "between" include? – Peter Taylor – 2011-08-23T11:45:32.423

@wok: You still haven't answered if it's inclusive or exclusive range? Is n part of the range to include? – mellamokb – 2011-08-23T15:09:23.947

@mellamokb Inclusive range. – Wok – 2011-08-23T15:15:03.990

Answers

7

Golfscript, 15 chars

~),{.`-1%~=},n*

Peter Taylor

Posted 2011-08-23T09:59:55.510

Reputation: 41 901

You may save a char comparing strings instead of numbers '~),{`.-1%=},n*'. – Howard – 2012-10-28T09:09:24.240

@Howard, if you want to post that yourself I'll upvote it. – Peter Taylor – 2012-10-28T15:32:26.457

That would feel like plain copying ;-) – Howard – 2012-10-29T12:53:01.397

10

Perl 5.10, 29 (or 39) characters

say for grep$_==reverse,0..<>

Needs the say feature enabled. 29 chars if you consider that to be free, otherwise 39 to add use 5.010;. Argument on STDIN.

Perl, 35 characters

#!perl -l
print for grep $_==reverse,0..<>

using the old perlgolf convention that #!perl is not counted but any flags following it are.

Perl, 36 characters

print$_,$/for grep $_==reverse,0..<>

If none of the others qualify.

hobbs

Posted 2011-08-23T09:59:55.510

Reputation: 2 403

1If you use -E in lieu of -e, you get say for free. – tchrist – 2012-05-28T20:56:27.047

Would you be so kind to explain what does $/ do? – Gurzo – 2011-08-24T08:38:42.170

1@Gurzo $/ is the input record separator, which defaults to newline. It's just a little shorter than literal "\n". – hobbs – 2011-08-24T11:54:33.523

Using map is shorter: map{say if$_==reverse}0..<> – jho – 2011-09-01T20:16:14.077

2@jho evil. Submit it :) – hobbs – 2011-09-01T21:02:12.520

9

Befunge 320 313 303 characters

(including significant newlines and whitespace)

 &:#v_v#  #                  :-1<
v91:<         v          <
0     >0.@    >\25**\1-:#^_v
pv   p09+1g09<^_           >$+     v
:>:25*%\25*/:| ^:p18:+1g18\<
 :          > >90g 1-:90p  | >  ^
>|           $^     <      >-|  ^  #<
 @           > 0 81p^        >:.25*,^
            ^                      <

I wonder if I could make this smaller by rerouting the paths...

Edit: redid the top part to avoid an extra line.

Blindy

Posted 2011-08-23T09:59:55.510

Reputation: 198

8

Perl 5.10 - 27 characters

map{say if$_==reverse}0..<>

Reads the argument from stdin.

jho

Posted 2011-08-23T09:59:55.510

Reputation: 241

7

Ruby 1.9, 39 characters

puts (?0..gets).select{|i|i==i.reverse}

Input (must not be terminated with a newline) via stdin. Example invocation:

echo -n 500 | ruby1.9 palinenum.rb

40 characters for a version which uses commandline args:

puts (?0..$*[0]).select{|i|i==i.reverse}

Ventero

Posted 2011-08-23T09:59:55.510

Reputation: 9 842

Rohit proposed saving 3 characters in each of these by using p instead of puts. – Peter Taylor – 2012-05-23T09:20:51.483

Using your code I got the following output, which seems to be wrong(I am using ruby 1.9.2p0 (2010-08-18) [i386-mingw32])

`irb(main):023:0> p (?0..gets).select{|i|i==i.reverse}

1

["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "11", "22", "33", "44", "55", "66", "77", "88", " 99"]

=> ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "11", "22", "33", "44", "55", "66", "77", "88" , "99"] ` The code below works for me

p ('0'..gets[0..-2]).select{|i|i==i.reverse}

Could you explain your code. – Rohit – 2012-05-23T09:29:48.857

@PeterTaylor @Rohit p and puts are not equivalent, in fact using p breaks the output, as puts writes every element on a newline, if called with an array, whereas p simply calls .to_s.

– Ventero – 2012-05-23T14:18:23.203

6

J, 20 characters

(#~(-:|.)@":"0)>:i.n

ephemient

Posted 2011-08-23T09:59:55.510

Reputation: 1 601

I can read it!:) Nice – defhlt – 2012-08-17T08:54:14.003

btw, to meet a requirement output numbers one per line you should add ,"0. – defhlt – 2012-08-17T10:22:21.283

@defhlt ,. works as well – Bolce Bussiere – 2018-03-19T17:15:42.153

5

Python, 57 51 chars

for i in range(input()):
 if`i`==`i`[::-1]:print i

Usage:

echo 500 | python palindromic.py

Clueless

Posted 2011-08-23T09:59:55.510

Reputation: 710

If using the interactive interpreter is legit, then you can avoid the print and just do if`i`==`i`[::-1]:i (I say this because the Scala solution depends on this). – Bakuriu – 2013-03-26T19:13:57.170

3Shorter: for i in range(input()):if\i`==`i`[::-1]:print i` – Steven Rumbalski – 2011-08-23T14:42:20.637

The range should be inclusive. And i think you can change you byte count to 50 (linebreaks are shorter on linux). – malkaroee – 2014-11-05T18:04:26.967

5

Perl > 5.10 : 25 characters

map$_==reverse&&say,0..<>

Toto

Posted 2011-08-23T09:59:55.510

Reputation: 909

4

APL (25 17)

↑t/⍨t≡∘⌽¨t←⍕¨0,⍳⎕

marinus

Posted 2011-08-23T09:59:55.510

Reputation: 30 224

3

Javascript 122 108 107 chars...

I'm sure this can be golfed more - I'm new to this!

n=prompt(o=[]);for(i=0;i<=n;i++)if(i+''==(i+'').split("").reverse().join(""))o.push(i);alert(o.join("\n"));

or

n=prompt(o=[]);i=-1;while(i++<n)if(i+''==(i+'').split("").reverse().join(""))o.push(i);alert(o.join("\n"));

Thomas Clayson

Posted 2011-08-23T09:59:55.510

Reputation: 191

You could make this even shorter by using for(i=0;++i<=n;) instead of for(i=0;i<=n;i++). – Cisplatin – 2016-04-18T21:00:45.707

I think using console.log() does not violate the rules, but reduces the code to 84 characters: for(i=0,n=prompt();i<=n;i++)if(i==(i+'').split('').reverse().join(''))console.log(i). – manatwork – 2013-04-30T07:31:35.887

Well, for starters the vars are unneeded, you can just make things global. Also prompt() doesn't strictly need parameters. – Clueless – 2011-08-23T14:27:18.693

However, you can use parameters to prompt() to save one semicolon: n=prompt(o=[]);. – mellamokb – 2011-08-23T15:01:41.880

Also you still have a var i=0 that can have the var removed in your for. – mellamokb – 2011-08-23T15:02:40.163

Something's wrong with your code. It prints out every number between 0 and n-1, not just the palindromes, in both FF and Chrome... Aha found it. You need parentheses: (i+'').split... otherwise you are reversing '' only :) BTW you can easily test your code with jsfiddle, for example: http://jsfiddle.net/rU5Vh/

– mellamokb – 2011-08-23T15:05:08.430

Also if I read the question right, it's inclusive of 0 and n. So that should really be i<=n rather than i<n in the for. – mellamokb – 2011-08-23T15:10:22.060

You can save a few more chars by moving i=0 declaration outside and switching for to a while loop: while(i++<n). – mellamokb – 2011-08-23T15:13:42.617

hmm mellamokb thanks for all the tips. :) I had the brackets before .split before but must have stupidly removed them to try and save chars without noticing. That while(i++<n) won't that a) remove 0 from the numbers and b) not get to i==n. – Thomas Clayson – 2011-08-23T15:40:53.270

I set i=-1 and it works with the while loop. Why does while(i++<n) also match true when i+1=n? – Thomas Clayson – 2011-08-23T15:46:33.760

1The trick is that i++<n compares i<n before adding 1 to i. Thus, it runs all the way to i=n. If you wanted to stop at i=n-1, you would use ++i<n instead. – mellamokb – 2011-08-23T17:21:39.700

1alert(o.join(" ")) needs to be alert(o.join("\n")) according to the specs. Add 1 to your character count when you fix this. – Thomas Eding – 2011-08-23T18:02:36.147

@mellamokb In JS, a for loop should never require more characters than its equivalent while loop. Instead of i=-1;while(i++<n) you can use for(i=-1;i++<n;) to save a character. – migimaru – 2011-08-24T08:59:14.617

3

Haskell 66 characters

main=do n<-readLn;mapM_ putStrLn[s|s<-map show[0..n],s==reverse s]

Thomas Eding

Posted 2011-08-23T09:59:55.510

Reputation: 796

Misspelled the language name... – eternalmatt – 2011-09-01T16:37:30.063

Fixed (filler chars) – Thomas Eding – 2011-09-01T18:03:03.940

3

Perl - 43 chars

for$i(0..<>){if($i==reverse$i){print$i,$/}}

This is my first attempt at code golf, so I'm pretty sure a Perl pro could golf it down.

Gurzo

Posted 2011-08-23T09:59:55.510

Reputation: 131

2

k (23 chars)

{i@&{&/i=|i:$x}'i:!1+x}

skeevey

Posted 2011-08-23T09:59:55.510

Reputation: 4 139

2

Brachylog (2), language postdates question:

With the I/O format stated in the question, 8 bytes

≥ℕA↔A≜ẉ⊥

Try it online!

With modern PPCG I/O rules, 4 bytes

≥ℕ.↔

Try it online!

This is a function that generates all the outputs, not a full program like the previous example, and so doesn't comply with the spec as written, but I thought I'd show how the program would look like if the question had been written to modern I/O standards (which permit the use of functions, and output via generators).

Explanation

≥ℕ.↔ 
 ℕ    Generate natural numbers
≥     less than or equal to the input
  .   but output only the ones
   ↔  that would produce the same output if reversed

For the full program version, we create a temporary variable A to hold the output, explicitly labelize it (this is done implicitly for the main predicate of a program), and use the well-known ẉ⊥ technique for outputting a generator's elements to standard output.

user62131

Posted 2011-08-23T09:59:55.510

Reputation:

When did modern PPCG I/O rules allow you to use a generator as submission? – Leaky Nun – 2017-04-27T08:59:36.357

@LeakyNun: I made the proposal on 30 Nov 2016, but the consensus is that they were already legal at that point (just not documented). We have an explicit rule allowing them now; through most of 2016, they weren't explicitly allowed and they weren't explicitly banned either.

– None – 2017-04-27T15:35:50.657

Oh, well, I see. – Leaky Nun – 2017-04-27T15:37:09.213

2

Mathematica 61

Column@Select[0~Range~Input[],#==Reverse@#&@IntegerDigits@#&]

chyanog

Posted 2011-08-23T09:59:55.510

Reputation: 1 078

2

PHP 64 58

for($i=0;$i<=$argv[1];print$i==strrev($i)?$i.'\n':'',$i++)

Changed $_GET['n'] to $argv[1] for command line input.

Thomas Clayson

Posted 2011-08-23T09:59:55.510

Reputation: 191

2

PHP, 59 55 53 chars

for($i=0;$i++<$argv[1];)if($i==strrev($i))echo"$i\n";

Usage

php palindromic.php 500

Edit : thanks Thomas

Alfwed

Posted 2011-08-23T09:59:55.510

Reputation: 131

you can remove the {s around the for loop and remove the space in echo "$i\n" to get echo"$i\n". That'll save you a few chars. Also, if you want to be cheeky you can change \n for and save a char. – Thomas Clayson – 2011-08-23T16:28:35.427

2

Scala 59

(0 to readInt)filter(x=>""+x==(""+x).reverse)mkString("\n")

user unknown

Posted 2011-08-23T09:59:55.510

Reputation: 4 210

I don't know any Scala, but does that really print on stdout? I would've guessed it's an expression returning a string. – Omar – 2011-11-29T20:58:51.423

In the interactive scala REPL, yes. You may test it here http://www.simplyscala.com/ but have to replace readInt with a concrete number, online.

– user unknown – 2011-11-29T22:39:24.977

2

C, 98 characters

n,i,j,t;main(){for(scanf("%d",&n);i<=n;i-j?1:printf("%d ",i),i++)for(t=i,j=0;t;t/=10)j=j*10+t%10;}

saeedn

Posted 2011-08-23T09:59:55.510

Reputation: 1 241

2

Befunge, 97 (grid size 37x4=148)

#v&#:< ,*25-$#1._.@
:>:::01-\0v >-!#^_$1-
*\25*/:!#v_::1>\#* #*25*#\/#$:_$\25*%
   `-10:\<+_v#

Have a better Befunge answer to this question. This is Befunge-93 specifically; I could probably make it even more compact with Befunge-98. I'll include that in a future edit.

Since you can't operate on strings in Befunge, the best I could do was compute the digit-reverse of each number (which I'm surprised I was able to manage without p and g) and compare it to the original number. The digit-reverse takes up most of the code (basically the entire third and fourth lines).

Note that the program, as it stands now, prints the numbers backwards from the input down to 0. If this is a big deal, let me know. (The challenge only says to enumerate them, not specifically in increasing order.)

Kasran

Posted 2011-08-23T09:59:55.510

Reputation: 681

+1. Lines can be closed by \n alone, so it's 94 bytes long. I don't think your "grid size" has any particular relevance. – har-wradim – 2014-11-07T11:24:41.240

2

05AB1E, 5 bytes (non-competing)

The language postdates the challenge and is therefore non-competing. Code:

ƒNÂQ–

Explanation:

ƒ      # For N in range(0, input() + 1)
 N     #   Push N
  Â    #   Bifurcate (pushes N and N[::-1])
   Q   #   Check for equality
    –  #   If true, pop and print N

Uses CP-1252 encoding. Try it online!.

Adnan

Posted 2011-08-23T09:59:55.510

Reputation: 41 965

LʒÂQ is 4, non-competing still though.. – Magic Octopus Urn – 2017-10-24T17:49:23.380

1

C# (217 214 191 chars)

Golfed version:

using System;using System.Linq;class P{static void Main(){int n=int.Parse(Console.ReadLine());do{var t=(n+"").ToArray();Array.Reverse(t);Console.Write(n+""==new string(t)?n+"\n":"");}while(n-->0);Console.ReadLine();}}

Readable:

using System;
using System.Linq;
class P
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        do
        {
            var t = (n + "").ToArray();
            Array.Reverse(t);
            Console.Write(n + "" == new string(t) ? n + "\n" : "");
        } while (n-->0);

        Console.ReadLine();
    }
}

This prints out palindromes in descending order making use of the n-->0 operator. (as n goes to 0).

*Edited version replaces do...while with while, saving 3 chars, but now you must input with n+1.

using System;using System.Linq;class P{static void Main(){int n=int.Parse(Console.ReadLine());while(n-->0){var t=(n+"").ToArray();Array.Reverse(t);Console.Write(n+""==new string(t)?n+"\n":"");}Console.ReadLine();}}

*edited: found a better way to reverse string without converting to array:

using System;using System.Linq;class P{static void Main(){int n=int.Parse(Console.ReadLine());while(n-->0)Console.Write(n+""==string.Join("",(""+n).Reverse())?n+"\n":"");Console.ReadLine();}}

Readable:

using System;
using System.Linq;
class P
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        while (n-->0)
            Console.Write(n + "" == string.Join("", ("" + n).Reverse()) ? n + "\n" : ""); 
        Console.ReadLine();
    }
}

Xantix

Posted 2011-08-23T09:59:55.510

Reputation: 141

1

PHP 53

Can 53 be any lower? Four different options:

for($i=$argv[1];$i-->0;)echo$i==strrev($i)?"$i\n":"";
for($i=$argv[1];$i-->0;)if($i==strrev($i))echo"$i\n";
while(($i=$argv[1]--)>0)echo$i==strrev($i)?"$i\n":"";
while(($i=$argv[1]--)>0)if($i==strrev($i))echo"$i\n";

If you want to get funky...

PHP 47

while(($i=$argv[1]--)>0)if($i==strrev($i))`$i`;

You have to ignore the error text. The palindrome numbers are still output to the command line, however.

jdstankosky

Posted 2011-08-23T09:59:55.510

Reputation: 1 474

1

Python

n=raw_input('')
for a in range(0,int(n)+1):
    r=str(a)
    if str(a)==r[::-1]:
        print r

user1027046

Posted 2011-08-23T09:59:55.510

Reputation: 11

Hmm...232 characters is not really very competitive. Perhaps you could reduce the variable names to one character and delete the spaces between the variables and operators? – Gareth – 2011-11-25T15:34:10.450

Good job. Some good tips for golfing Python can be found in this question: http://codegolf.stackexchange.com/questions/54/tips-for-golfing-in-python

– Gareth – 2011-11-25T15:48:18.910

You can get rid of n --just replace int(n) by int(raw_input())-- and you can change str(a) to r in the if statement – Omar – 2011-11-29T20:49:47.650

1

Groovy, 83

System.in.eachLine{(0..it.toInteger()).each{if("$it"=="$it".reverse())println(it)}}

Armand

Posted 2011-08-23T09:59:55.510

Reputation: 499

1

Burlesque, 13

rz{J<-==}f[p^

Burlesque has some useful commands for golfing, in this case <- reverses anything you put before it.

          rz             creates a range from 0 to input
            {            start of filtering (discards any element not returning 1) the created range
              J <- ==    duplicates element, reverses duplicate, compare
            }f[          end filtering, now we're left with a block of palindromic integer which
            p^           takes care of, and outputs the numbers as desired.

Try it here The linked example has 1000 as input, change it to see more or fewer palindromic numbers.

AndoDaan

Posted 2011-08-23T09:59:55.510

Reputation: 2 232

Burlesque doesn't really specify how input is provided to the program, that's up to the implementation to decide. The recommendation in the 'specification' is to push STDIN as a string to the stack. – mroman – 2016-05-27T07:51:12.850

1How does your script accept the input? In your example it seems to be part of the script itself. – har-wradim – 2014-11-07T11:06:34.707

@har-wradim Burlesque takes input the same way as Golfscript does. Meaning that input is placed on the stack before the program code. [input][code]. In my program above input can be any positive number (the linked example has 1000 for input), which will be followed by the code rz{J<-==}f[p^ You can change the 1000 to 10 000 or 100 000 and the code will run all the palindromic number up until the input value. – AndoDaan – 2014-11-10T05:42:35.630

GolfScript is expected to push what comes from stdin on top of the stack by default. If this behavior is absent from the Burlesque specifications than your solution seems to violate one of the requirements.

– har-wradim – 2014-11-10T17:00:54.953

@har-wradim As does Burlesque. I linked to the online shell for ease of access, but feel free to download and compile the Burlesque source code to check the different ways it can read input. – AndoDaan – 2014-11-11T04:20:56.160

@har-wradim wait, it's because I put [Input n] in my explenation, isn't it? Solved! – AndoDaan – 2014-11-11T04:28:55.310

1

Pyth, 11

VhQIq`N_`NN

Example:

$ pyth -c 'VhQIq`N_`NN' <<< 200
0
1
2
3
4
5
6
7
8
9
11
22
33
44
55
66
77
88
99
101
111
121
131
141
151
161
171
181
191

isaacg

Posted 2011-08-23T09:59:55.510

Reputation: 39 268

1

C++, 145 143

#include<iostream> 
int i,j,n,r;int main(){std::cin>>n;for(;i<=n;i++){j=i;while(j!=0){r=r*10;r=r+j%10;j=j/10;}if(i==r)std::cout<<i<<' ';r=0;}}

Alternative [143 too]:

#include<stdio.h>
int i,j,n,r;int main(){scanf("%d",&n);for(;i<=n;i++){j=i;while(j!=0){r=r*10;r=r+j%10;j=j/10;}if(i==r)printf("%d ", i);r=0;}}

Display_name

Posted 2011-08-23T09:59:55.510

Reputation: 330

1

Python (54)

print filter(lambda i:`i`==`i`[::-1],range(input()+1))

Sarath Sadasivan Pillai

Posted 2011-08-23T09:59:55.510

Reputation: 111

Added print staement – Sarath Sadasivan Pillai – 2018-03-19T13:50:32.913

1

Q (33)

{if[x="I"$(|:) -3!x;:x]} each til

Probably a neater way to do this but anyway, sample usage (you enter n+1 to get to n):

q){if[x="I"$(|:) -3!x;:x]} each til  10
0 1 2 3 4 5 6 7 8 9

Suggestion by tmartin, gets it down to 29:

({$[x="I"$(|:) -3!x;x;]}')(!)

Same usage.

sinedcm

Posted 2011-08-23T09:59:55.510

Reputation: 410

1

Q (34 chars)

Pass n rather than n+1 as an argument for this Q solution.

{i(&)({all i=(|)i:($)x}')i:(!)1+x}

skeevey

Posted 2011-08-23T09:59:55.510

Reputation: 4 139

1

Q,32

{a(&)a~'((|:)')a:((-3!)')(!)1+x}

tmartin

Posted 2011-08-23T09:59:55.510

Reputation: 3 917

1

Python, 106 characters

import sys as a
print(type(a.argv[1]))
for x in range(int(a.argv[1])+1):
 x=str(x)
 if x==x[::-1]:print(x)

usage:

python a.py 500

Ashwini Chaudhary

Posted 2011-08-23T09:59:55.510

Reputation: 169

0

Stax, 7 characters

çi/i∩≈f

Run and debug online!

Explanation

Uses the unpacked version to explain.

^rfcEcr=
^r          [0..n]
  f         Print each element that matches the predicate on individual line
   cE       Array of decimal digits
     cr=    Equals its reverse

Weijun Zhou

Posted 2011-08-23T09:59:55.510

Reputation: 3 396

0

T-SQL, 72

DECLARE @@ INT=X,@ INT=0#:IF @=REVERSE(@)PRINT @ SET @+=1IF @<=@@ GOTO #

Replace "X" with the input number. This code runs in SQL Server 2008 R2.

Muqo

Posted 2011-08-23T09:59:55.510

Reputation: 499

0

Python interactive Shell, 47

[n for n in range(input()+1) if `n`==`n`[::-1]]

malkaroee

Posted 2011-08-23T09:59:55.510

Reputation: 332

0

Pyke, 6 bytes (noncompeting, language newer than contest)

S#`D_q

Explanation:

S      - range(1, input()+1)
 #     - filter where True
  `D_q -  str(num) == str(num)[::-1]

Try it here!

Blue

Posted 2011-08-23T09:59:55.510

Reputation: 26 661

0

Gogh, 17 bytes

This answer is non-competing, as the language was created after the challenge was posted.

G{÷÷sR=¦?}m0%{Ƥ}m

Usage:

$ ./gogh i 'G{÷÷sR=¦?}m0%{Ƥ}m' <input>

Explanation

        “ Implicit input.                                      ”
G       “ Push an inclusive list.                              ”
{       “ Open a code block.                                   ”
 ÷÷     “ Push two copies of the TOS.                          ”
 sR=    “ Check if the integer is palindromic.                 ”
 ¦?     “ If n is palindromic, yield n. If not, yield 0.       ”
}m      “ Close the code block and map it to the TOS.          ”
0%      “ Remove non-palindromic integers (denoted by zeroes). ”
{       “ Open a code block.                                   ”
 Ƥ      “ Print.                                               ”
}m      “ Close the code block and map it to the TOS.          ”
        “ Implicit output.                                     ”

Zach Gates

Posted 2011-08-23T09:59:55.510

Reputation: 6 152

0

Visual Basic for Applications, 66 bytes

Callable from the immediate window.

Sub u(b)
For i=0To b
If StrReverse(i)=i Then Debug.?i
Next
End Sub

dnep

Posted 2011-08-23T09:59:55.510

Reputation: 301