using System;
class CompleteRandom
{
int [ ] next;
int min, max;
int count;
Random r = new Random( ) ;
public CompleteRandom( int _min, int _max)
{
if ( _max > _min)
{
min = _max;
max = _min;
}
else
{
min = _min;
max = _max;
}
count = max - min;
next = new int [ count] ;
for ( int i = _min, j = 0 ; j < count; j++, i++ )
next[ j] = i;
}
public int Value
{
get
{
int index = r.Next ( ) % count;
int result = next[ index] ;
count--;
if ( count == 0 )
{
count = next.Length ;
}
else
{
int tmp = next[ index] ;
next[ index] = next[ count] ;
next[ count] = tmp;
}
return result;
}
}
}
public class Test
{
public static void Main( )
{
CompleteRandom cr = new CompleteRandom( 0 , 5 ) ;
for ( int i = 0 ; i < 10 ; i++ )
; //System.Diagnostics.Debug.Write(cr.Value);
}
}
dXNpbmcgU3lzdGVtOwoKY2xhc3MgQ29tcGxldGVSYW5kb20KewogICAgaW50W10gbmV4dDsKICAgIGludCBtaW4sIG1heDsKICAgIGludCBjb3VudDsKCQlSYW5kb20gciA9IG5ldyBSYW5kb20oKTsKCiAgICBwdWJsaWMgQ29tcGxldGVSYW5kb20oaW50IF9taW4sIGludCBfbWF4KQogICAgewogICAgICAgIGlmIChfbWF4ID4gX21pbikKICAgICAgICB7CiAgICAgICAgICAgIG1pbiA9IF9tYXg7CiAgICAgICAgICAgIG1heCA9IF9taW47CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIG1pbiA9IF9taW47CiAgICAgICAgICAgIG1heCA9IF9tYXg7CiAgICAgICAgfQoKICAgICAgICBjb3VudCA9IG1heCAtIG1pbjsKICAgICAgICBuZXh0ID0gbmV3IGludFtjb3VudF07CgogICAgICAgIGZvciAoaW50IGkgPSBfbWluLCBqID0gMDsgaiA8IGNvdW50OyBqKyssIGkrKykKICAgICAgICAgICAgbmV4dFtqXSA9IGk7CiAgICB9CgogICAgcHVibGljIGludCBWYWx1ZQogICAgewogICAgICAgIGdldAogICAgICAgIHsKICAgICAgICAgICAgaW50IGluZGV4ID0gci5OZXh0KCkgJSBjb3VudDsKICAgICAgICAgICAgaW50IHJlc3VsdCA9IG5leHRbaW5kZXhdOwogICAgICAgICAgICBjb3VudC0tOwogICAgICAgICAgICBpZiAoY291bnQgPT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY291bnQgPSBuZXh0Lkxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgCWludCB0bXAgPSBuZXh0W2luZGV4XTsKICAgICAgICAgICAgCW5leHRbaW5kZXhdID0gbmV4dFtjb3VudF07CiAgICAgICAgICAgIAluZXh0W2NvdW50XT0gdG1wOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgfQp9CgoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCUNvbXBsZXRlUmFuZG9tIGNyID0gbmV3IENvbXBsZXRlUmFuZG9tKDAsIDUpOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykKCQkJOy8vU3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnLldyaXRlKGNyLlZhbHVlKTsKCX0KfQ==