public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/7929: ICE on struct initialization
@ 2002-10-10 17:26 Joe Buck
  0 siblings, 0 replies; 6+ messages in thread
From: Joe Buck @ 2002-10-10 17:26 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/7929; it has been noted by GNATS.

From: Joe Buck <jbuck@synopsys.com>
To: a.rottmann@gmx.at, gcc-gnats@gcc.gnu.org, gcc-prs@gcc.gnu.org,
   gcc-bugs@gcc.gnu.org
Cc:  
Subject: Re: c++/7929: ICE on struct initialization
Date: Thu, 10 Oct 2002 17:22:14 -0700

 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7929
 
 I'm not seeing this error either with the FSF 3.2 release or with the 
 CVS 3.2
 branch as of today.  The test case I'm using is
 
 -----------
 #include <string>
 
 struct Bar
 {
      std::string str;
 };
 
 int main()
 {
    Bar bar = { "hello" };
 }
 ----------
 There is no crash or diagnostic.  Perhaps a bug was introduced and then 
 fixed on
 the branch sometime between Aug 30 and now, or perhaps a local Debian 
 patch is
 responsible.  Any objection to closing the bug?
 
 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: c++/7929: ICE on struct initialization
@ 2002-10-11 11:01 jbuck
  0 siblings, 0 replies; 6+ messages in thread
From: jbuck @ 2002-10-11 11:01 UTC (permalink / raw)
  To: a.rottmann, gcc-bugs, gcc-prs, nobody

Synopsis: ICE on struct initialization

State-Changed-From-To: open->closed
State-Changed-By: jbuck
State-Changed-When: Fri Oct 11 11:01:47 2002
State-Changed-Why:
    Cannot be reproduced on the current 3.2 CVS branch or 3.2;
    possibly introduced on the branch and later fixed.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7929


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: c++/7929: ICE on struct initialization
@ 2002-10-11  1:36 Andreas Rottmann
  0 siblings, 0 replies; 6+ messages in thread
From: Andreas Rottmann @ 2002-10-11  1:36 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/7929; it has been noted by GNATS.

From: Andreas Rottmann <a.rottmann@gmx.at>
To: Joe Buck <jbuck@synopsys.com>
Cc: gcc-gnats@gcc.gnu.org,  gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org
Subject: Re: c++/7929: ICE on struct initialization
Date: 11 Oct 2002 10:27:41 +0200

 Joe Buck <jbuck@synopsys.com> writes:
 
 > http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7929
 > 
 > I'm not seeing this error either with the FSF 3.2 release or with the
 > CVS 3.2
 > branch as of today.  The test case I'm using is
 > 
 > -----------
 > #include <string>
 > 
 > struct Bar
 > {
 >      std::string str;
 > };
 > 
 > int main()
 > {
 >    Bar bar = { "hello" };
 > }
 > ----------
 > There is no crash or diagnostic.  Perhaps a bug was introduced and
 > then fixed on
 > the branch sometime between Aug 30 and now, or perhaps a local Debian
 > patch is
 > responsible.  Any objection to closing the bug?
 > 
 > 
 I just upgraded my Debian packages (to the latest version from
 unstable) and the bug has vanished!
 
 Regards, Andy
 -- 
 Andreas Rottmann         | Dru@ICQ        | 118634484@ICQ | a.rottmann@gmx.at
 http://www.8ung.at/rotty | GnuPG Key: http://www.8ung.at/rotty/gpg.asc
 Fingerprint              | DFB4 4EB4 78A4 5EEE 6219  F228 F92F CFC5 01FD 5B62


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: c++/7929: ICE on struct initialization
@ 2002-09-30  4:56 Andreas Rottmann
  0 siblings, 0 replies; 6+ messages in thread
From: Andreas Rottmann @ 2002-09-30  4:56 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/7929; it has been noted by GNATS.

From: Andreas Rottmann <a.rottmann@gmx.at>
To: Reichelt <reichelt@igpm.rwth-aachen.de>
Cc: gcc-gnats@gcc.gnu.org,  gcc-bugs@gcc.gnu.org
Subject: Re: c++/7929: ICE on struct initialization
Date: 30 Sep 2002 13:48:30 +0200

 --=-=-=
 
 Reichelt <reichelt@igpm.rwth-aachen.de> writes:
 
 > Hi,
 > 
 > it seems that your gcc installation is broken:
 > Your preprocessed file shows lots of lines like
 > 
 > # 6 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/string" 2 3
 > 
 > which refer to 2.95.4 instead of 3.2. In fact there is not a single line
 > referring to 3.2.
 > 
 Hmm, strange, must have messed up preprocessor output
 somehow. However, I have attached the g++-3.2 -E output, and this one
 has not a single '2.95' in it.
 
 > I cannot reproduce your bug on an i686 with a working installation of
 > gcc. The preprocessed file causes some error messages, but no ICE. 
 > 
 Hmm, I use g++ 3.2 from Debian unstable and always get this ICE on
 similiar struct inits...
 
 
 --=-=-=
 Content-Disposition: attachment; filename=ice.i
 Content-Description: preprocessor code
 
 # 1 "gcc-3.2-ICE.cc"
 # 1 "<built-in>"
 # 1 "<command line>"
 # 1 "gcc-3.2-ICE.cc"
 # 1 "/usr/include/c++/3.2/string" 1 3
 # 44 "/usr/include/c++/3.2/string" 3
 
 # 1 "/usr/include/c++/3.2/i386-linux/bits/c++config.h" 1 3
 # 34 "/usr/include/c++/3.2/i386-linux/bits/c++config.h" 3
 # 1 "/usr/include/c++/3.2/i386-linux/bits/os_defines.h" 1 3
 # 39 "/usr/include/c++/3.2/i386-linux/bits/os_defines.h" 3
 # 1 "/usr/include/features.h" 1 3
 # 283 "/usr/include/features.h" 3
 # 1 "/usr/include/sys/cdefs.h" 1 3
 # 284 "/usr/include/features.h" 2 3
 # 312 "/usr/include/features.h" 3
 # 1 "/usr/include/gnu/stubs.h" 1 3
 # 313 "/usr/include/features.h" 2 3
 # 40 "/usr/include/c++/3.2/i386-linux/bits/os_defines.h" 2 3
 # 35 "/usr/include/c++/3.2/i386-linux/bits/c++config.h" 2 3
 # 46 "/usr/include/c++/3.2/string" 2 3
 # 1 "/usr/include/c++/3.2/bits/stringfwd.h" 1 3
 # 43 "/usr/include/c++/3.2/bits/stringfwd.h" 3
 
 
 
 namespace std
 {
   template<class _CharT>
     struct char_traits;
 
   template<> struct char_traits<char>;
 
   template<> struct char_traits<wchar_t>;
 
 
   template<typename _Alloc>
     class allocator;
 
   template<typename _CharT, typename _Traits = char_traits<_CharT>,
            typename _Alloc = allocator<_CharT> >
     class basic_string;
 
   typedef basic_string<char> string;
   typedef basic_string<wchar_t> wstring;
 }
 # 47 "/usr/include/c++/3.2/string" 2 3
 # 1 "/usr/include/c++/3.2/bits/char_traits.h" 1 3
 # 44 "/usr/include/c++/3.2/bits/char_traits.h" 3
 
 # 1 "/usr/include/c++/3.2/cstring" 1 3
 # 48 "/usr/include/c++/3.2/cstring" 3
 
 # 1 "/usr/include/c++/3.2/cstddef" 1 3
 # 47 "/usr/include/c++/3.2/cstddef" 3
 
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stddef.h" 1 3
 # 147 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stddef.h" 3
 typedef int ptrdiff_t;
 # 201 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stddef.h" 3
 typedef unsigned int size_t;
 # 49 "/usr/include/c++/3.2/cstddef" 2 3
 
 namespace std
 {
   using ::ptrdiff_t;
   using ::size_t;
 }
 # 50 "/usr/include/c++/3.2/cstring" 2 3
 
 # 1 "/usr/include/string.h" 1 3
 # 28 "/usr/include/string.h" 3
 extern "C" {
 
 
 
 
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stddef.h" 1 3
 # 34 "/usr/include/string.h" 2 3
 
 
 
 extern void *memcpy (void *__restrict __dest,
                      __const void *__restrict __src, size_t __n) throw ();
 
 
 extern void *memmove (void *__dest, __const void *__src, size_t __n)
      throw ();
 
 
 
 
 
 extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
                       int __c, size_t __n)
      throw ();
 
 
 
 
 extern void *memset (void *__s, int __c, size_t __n) throw ();
 
 
 extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
      throw () __attribute__ ((__pure__));
 
 
 extern void *memchr (__const void *__s, int __c, size_t __n)
       throw () __attribute__ ((__pure__));
 
 
 
 
 extern void *rawmemchr (__const void *__s, int __c) throw () __attribute__ ((__pure__));
 
 
 extern void *memrchr (__const void *__s, int __c, size_t __n)
       throw () __attribute__ ((__pure__));
 
 
 
 
 extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
      throw ();
 
 extern char *strncpy (char *__restrict __dest,
                       __const char *__restrict __src, size_t __n) throw ();
 
 
 extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
      throw ();
 
 extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
                       size_t __n) throw ();
 
 
 extern int strcmp (__const char *__s1, __const char *__s2)
      throw () __attribute__ ((__pure__));
 
 extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
      throw () __attribute__ ((__pure__));
 
 
 extern int strcoll (__const char *__s1, __const char *__s2)
      throw () __attribute__ ((__pure__));
 
 extern size_t strxfrm (char *__restrict __dest,
                        __const char *__restrict __src, size_t __n) throw ();
 
 
 
 
 
 # 1 "/usr/include/xlocale.h" 1 3
 # 28 "/usr/include/xlocale.h" 3
 typedef struct __locale_struct
 {
 
   struct locale_data *__locales[13];
 
 
   const unsigned short int *__ctype_b;
   const int *__ctype_tolower;
   const int *__ctype_toupper;
 } *__locale_t;
 # 109 "/usr/include/string.h" 2 3
 
 
 extern int __strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l)
      throw () __attribute__ ((__pure__));
 
 extern size_t __strxfrm_l (char *__dest, __const char *__src, size_t __n,
                            __locale_t __l) throw ();
 
 
 
 
 extern char *strdup (__const char *__s) throw () __attribute__ ((__malloc__));
 
 
 
 
 
 
 extern char *strndup (__const char *__string, size_t __n)
      throw () __attribute__ ((__malloc__));
 # 155 "/usr/include/string.h" 3
 extern char *strchr (__const char *__s, int __c) throw () __attribute__ ((__pure__));
 
 extern char *strrchr (__const char *__s, int __c) throw () __attribute__ ((__pure__));
 
 
 
 
 extern char *strchrnul (__const char *__s, int __c) throw () __attribute__ ((__pure__));
 
 
 
 
 extern size_t strcspn (__const char *__s, __const char *__reject)
      throw () __attribute__ ((__pure__));
 
 
 extern size_t strspn (__const char *__s, __const char *__accept)
      throw () __attribute__ ((__pure__));
 
 extern char *strpbrk (__const char *__s, __const char *__accept)
      throw () __attribute__ ((__pure__));
 
 extern char *strstr (__const char *__haystack, __const char *__needle)
      throw () __attribute__ ((__pure__));
 
 
 
 extern char *strcasestr (__const char *__haystack, __const char *__needle)
      throw () __attribute__ ((__pure__));
 
 
 
 extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
      throw ();
 
 
 
 extern char *__strtok_r (char *__restrict __s,
                          __const char *__restrict __delim,
                          char **__restrict __save_ptr) throw ();
 
 extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
                        char **__restrict __save_ptr) throw ();
 
 
 
 
 
 
 extern void *memmem (__const void *__haystack, size_t __haystacklen,
                      __const void *__needle, size_t __needlelen)
      throw () __attribute__ ((__pure__));
 
 
 
 extern void *__mempcpy (void *__restrict __dest,
                         __const void *__restrict __src, size_t __n) throw ();
 extern void *mempcpy (void *__restrict __dest,
                       __const void *__restrict __src, size_t __n) throw ();
 
 
 
 
 extern size_t strlen (__const char *__s) throw () __attribute__ ((__pure__));
 
 
 
 
 extern size_t strnlen (__const char *__string, size_t __maxlen)
      throw () __attribute__ ((__pure__));
 
 
 
 
 extern char *strerror (int __errnum) throw ();
 
 
 
 extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) throw ();
 
 
 
 
 extern void __bzero (void *__s, size_t __n) throw ();
 
 
 
 extern void bcopy (__const void *__src, void *__dest, size_t __n) throw ();
 
 
 extern void bzero (void *__s, size_t __n) throw ();
 
 
 extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
      throw () __attribute__ ((__pure__));
 
 
 extern char *index (__const char *__s, int __c) throw () __attribute__ ((__pure__));
 
 
 extern char *rindex (__const char *__s, int __c) throw () __attribute__ ((__pure__));
 
 
 
 extern int ffs (int __i) throw () __attribute__ ((__const__));
 
 
 
 
 extern int ffsl (long int __l) throw () __attribute__ ((__const__));
 
 __extension__ extern int ffsll (long long int __ll)
      throw () __attribute__ ((__const__));
 
 
 
 
 extern int strcasecmp (__const char *__s1, __const char *__s2)
      throw () __attribute__ ((__pure__));
 
 
 extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
      throw () __attribute__ ((__pure__));
 
 
 
 
 
 extern int __strcasecmp_l (__const char *__s1, __const char *__s2,
                            __locale_t __loc) throw () __attribute__ ((__pure__));
 
 extern int __strncasecmp_l (__const char *__s1, __const char *__s2,
                             size_t __n, __locale_t __loc)
      throw () __attribute__ ((__pure__));
 
 
 
 
 
 extern char *strsep (char **__restrict __stringp,
                      __const char *__restrict __delim) throw ();
 
 
 
 
 extern int strverscmp (__const char *__s1, __const char *__s2)
      throw () __attribute__ ((__pure__));
 
 
 extern char *strsignal (int __sig) throw ();
 
 
 extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src)
      throw ();
 extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src)
      throw ();
 
 
 
 extern char *__stpncpy (char *__restrict __dest,
                         __const char *__restrict __src, size_t __n) throw ();
 extern char *stpncpy (char *__restrict __dest,
                       __const char *__restrict __src, size_t __n) throw ();
 
 
 extern char *strfry (char *__string) throw ();
 
 
 extern void *memfrob (void *__s, size_t __n) throw ();
 
 
 
 
 
 
 extern char *basename (__const char *__filename) throw ();
 # 364 "/usr/include/string.h" 3
 }
 # 52 "/usr/include/c++/3.2/cstring" 2 3
 # 77 "/usr/include/c++/3.2/cstring" 3
 namespace std
 {
   using ::memcpy;
   using ::memmove;
   using ::strcpy;
   using ::strncpy;
   using ::strcat;
   using ::strncat;
   using ::memcmp;
   using ::strcmp;
   using ::strcoll;
   using ::strncmp;
   using ::strxfrm;
   using ::strcspn;
   using ::strspn;
   using ::strtok;
   using ::memset;
   using ::strerror;
   using ::strlen;
 
   using ::memchr;
 
   inline void*
   memchr(void* __p, int __c, size_t __n)
   { return memchr(const_cast<const void*>(__p), __c, __n); }
 
   using ::strchr;
 
   inline char*
   strchr(char* __s1, int __n)
   { return __builtin_strchr(const_cast<const char*>(__s1), __n); }
 
   using ::strpbrk;
 
   inline char*
   strpbrk(char* __s1, const char* __s2)
   { return __builtin_strpbrk(const_cast<const char*>(__s1), __s2); }
 
   using ::strrchr;
 
   inline char*
   strrchr(char* __s1, int __n)
   { return __builtin_strrchr(const_cast<const char*>(__s1), __n); }
 
   using ::strstr;
 
   inline char*
   strstr(char* __s1, const char* __s2)
   { return __builtin_strstr(const_cast<const char*>(__s1), __s2); }
 }
 # 46 "/usr/include/c++/3.2/bits/char_traits.h" 2 3
 # 1 "/usr/include/c++/3.2/bits/fpos.h" 1 3
 # 43 "/usr/include/c++/3.2/bits/fpos.h" 3
 
 # 1 "/usr/include/c++/3.2/i386-linux/bits/c++io.h" 1 3
 # 35 "/usr/include/c++/3.2/i386-linux/bits/c++io.h" 3
 # 1 "/usr/include/c++/3.2/cstdio" 1 3
 # 48 "/usr/include/c++/3.2/cstdio" 3
 
 
 
 
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 1 3
 # 39 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 3
 extern "C" {
 
 
 
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stddef.h" 1 3
 # 44 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 2 3
 
 # 1 "/usr/include/bits/types.h" 1 3
 # 29 "/usr/include/bits/types.h" 3
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stddef.h" 1 3
 # 30 "/usr/include/bits/types.h" 2 3
 
 
 typedef unsigned char __u_char;
 typedef unsigned short __u_short;
 typedef unsigned int __u_int;
 typedef unsigned long __u_long;
 
 __extension__ typedef unsigned long long int __u_quad_t;
 __extension__ typedef long long int __quad_t;
 # 49 "/usr/include/bits/types.h" 3
 typedef signed char __int8_t;
 typedef unsigned char __uint8_t;
 typedef signed short int __int16_t;
 typedef unsigned short int __uint16_t;
 typedef signed int __int32_t;
 typedef unsigned int __uint32_t;
 
 __extension__ typedef signed long long int __int64_t;
 __extension__ typedef unsigned long long int __uint64_t;
 
 typedef __quad_t *__qaddr_t;
 
 typedef __u_quad_t __dev_t;
 typedef __u_int __uid_t;
 typedef __u_int __gid_t;
 typedef __u_long __ino_t;
 typedef __u_int __mode_t;
 typedef __u_int __nlink_t;
 typedef long int __off_t;
 typedef __quad_t __loff_t;
 typedef int __pid_t;
 typedef int __ssize_t;
 typedef __u_long __rlim_t;
 typedef __u_quad_t __rlim64_t;
 typedef __u_int __id_t;
 
 typedef struct
   {
     int __val[2];
   } __fsid_t;
 
 
 typedef int __daddr_t;
 typedef char *__caddr_t;
 typedef long int __time_t;
 typedef unsigned int __useconds_t;
 typedef long int __suseconds_t;
 typedef long int __swblk_t;
 
 typedef long int __clock_t;
 
 
 typedef int __clockid_t;
 
 
 typedef int __timer_t;
 
 
 
 
 
 
 typedef int __key_t;
 
 
 typedef unsigned short int __ipc_pid_t;
 
 
 
 typedef long int __blksize_t;
 
 
 
 
 typedef long int __blkcnt_t;
 typedef __quad_t __blkcnt64_t;
 
 
 typedef __u_long __fsblkcnt_t;
 typedef __u_quad_t __fsblkcnt64_t;
 
 
 typedef __u_long __fsfilcnt_t;
 typedef __u_quad_t __fsfilcnt64_t;
 
 
 typedef __u_quad_t __ino64_t;
 
 
 typedef __loff_t __off64_t;
 
 
 typedef long int __t_scalar_t;
 typedef unsigned long int __t_uscalar_t;
 
 
 typedef int __intptr_t;
 
 
 typedef unsigned int __socklen_t;
 
 
 
 
 # 1 "/usr/include/bits/pthreadtypes.h" 1 3
 # 23 "/usr/include/bits/pthreadtypes.h" 3
 # 1 "/usr/include/bits/sched.h" 1 3
 # 68 "/usr/include/bits/sched.h" 3
 struct __sched_param
   {
     int __sched_priority;
   };
 # 24 "/usr/include/bits/pthreadtypes.h" 2 3
 
 typedef int __atomic_lock_t;
 
 
 struct _pthread_fastlock
 {
   long int __status;
   __atomic_lock_t __spinlock;
 
 };
 
 
 
 typedef struct _pthread_descr_struct *_pthread_descr;
 
 
 
 
 
 typedef struct __pthread_attr_s
 {
   int __detachstate;
   int __schedpolicy;
   struct __sched_param __schedparam;
   int __inheritsched;
   int __scope;
   size_t __guardsize;
   int __stackaddr_set;
   void *__stackaddr;
   size_t __stacksize;
 } pthread_attr_t;
 
 
 
 typedef struct
 {
   struct _pthread_fastlock __c_lock;
   _pthread_descr __c_waiting;
 } pthread_cond_t;
 
 
 
 typedef struct
 {
   int __dummy;
 } pthread_condattr_t;
 
 
 typedef unsigned int pthread_key_t;
 
 
 
 
 
 typedef struct
 {
   int __m_reserved;
   int __m_count;
   _pthread_descr __m_owner;
   int __m_kind;
   struct _pthread_fastlock __m_lock;
 } pthread_mutex_t;
 
 
 
 typedef struct
 {
   int __mutexkind;
 } pthread_mutexattr_t;
 
 
 
 typedef int pthread_once_t;
 
 
 
 
 typedef struct _pthread_rwlock_t
 {
   struct _pthread_fastlock __rw_lock;
   int __rw_readers;
   _pthread_descr __rw_writer;
   _pthread_descr __rw_read_waiting;
   _pthread_descr __rw_write_waiting;
   int __rw_kind;
   int __rw_pshared;
 } pthread_rwlock_t;
 
 
 
 typedef struct
 {
   int __lockkind;
   int __pshared;
 } pthread_rwlockattr_t;
 
 
 
 
 typedef volatile int pthread_spinlock_t;
 
 
 typedef struct {
   struct _pthread_fastlock __ba_lock;
   int __ba_required;
   int __ba_present;
   _pthread_descr __ba_waiting;
 } pthread_barrier_t;
 
 
 typedef struct {
   int __pshared;
 } pthread_barrierattr_t;
 
 
 
 
 
 typedef unsigned long int pthread_t;
 # 144 "/usr/include/bits/types.h" 2 3
 # 46 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 2 3
 # 54 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 3
 typedef struct _IO_FILE FILE;
 # 64 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 3
 typedef struct _IO_FILE __FILE;
 # 74 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 3
 # 1 "/usr/include/libio.h" 1 3
 # 32 "/usr/include/libio.h" 3
 # 1 "/usr/include/_G_config.h" 1 3
 # 14 "/usr/include/_G_config.h" 3
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stddef.h" 1 3
 # 321 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stddef.h" 3
 typedef unsigned int wint_t;
 # 15 "/usr/include/_G_config.h" 2 3
 # 24 "/usr/include/_G_config.h" 3
 # 1 "/usr/include/wchar.h" 1 3
 # 48 "/usr/include/wchar.h" 3
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stddef.h" 1 3
 # 49 "/usr/include/wchar.h" 2 3
 
 # 1 "/usr/include/bits/wchar.h" 1 3
 # 51 "/usr/include/wchar.h" 2 3
 # 67 "/usr/include/wchar.h" 3
 typedef struct
 {
   int __count;
   union
   {
     wint_t __wch;
     char __wchb[4];
   } __value;
 } __mbstate_t;
 # 25 "/usr/include/_G_config.h" 2 3
 
 typedef struct
 {
   __off_t __pos;
   __mbstate_t __state;
 } _G_fpos_t;
 typedef struct
 {
   __off64_t __pos;
   __mbstate_t __state;
 } _G_fpos64_t;
 # 44 "/usr/include/_G_config.h" 3
 # 1 "/usr/include/gconv.h" 1 3
 # 28 "/usr/include/gconv.h" 3
 # 1 "/usr/include/wchar.h" 1 3
 # 48 "/usr/include/wchar.h" 3
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stddef.h" 1 3
 # 49 "/usr/include/wchar.h" 2 3
 # 29 "/usr/include/gconv.h" 2 3
 
 
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stddef.h" 1 3
 # 32 "/usr/include/gconv.h" 2 3
 
 
 
 
 
 enum
 {
   __GCONV_OK = 0,
   __GCONV_NOCONV,
   __GCONV_NODB,
   __GCONV_NOMEM,
 
   __GCONV_EMPTY_INPUT,
   __GCONV_FULL_OUTPUT,
   __GCONV_ILLEGAL_INPUT,
   __GCONV_INCOMPLETE_INPUT,
 
   __GCONV_ILLEGAL_DESCRIPTOR,
   __GCONV_INTERNAL_ERROR
 };
 
 
 
 enum
 {
   __GCONV_IS_LAST = 0x0001,
   __GCONV_IGNORE_ERRORS = 0x0002
 };
 
 
 
 struct __gconv_step;
 struct __gconv_step_data;
 struct __gconv_loaded_object;
 struct __gconv_trans_data;
 
 
 
 typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *,
                             __const unsigned char **, __const unsigned char *,
                             unsigned char **, size_t *, int, int);
 
 
 typedef int (*__gconv_init_fct) (struct __gconv_step *);
 typedef void (*__gconv_end_fct) (struct __gconv_step *);
 
 
 
 typedef int (*__gconv_trans_fct) (struct __gconv_step *,
                                   struct __gconv_step_data *, void *,
                                   __const unsigned char *,
                                   __const unsigned char **,
                                   __const unsigned char *, unsigned char **,
                                   size_t *);
 
 
 typedef int (*__gconv_trans_context_fct) (void *, __const unsigned char *,
                                           __const unsigned char *,
                                           unsigned char *, unsigned char *);
 
 
 typedef int (*__gconv_trans_query_fct) (__const char *, __const char ***,
                                         size_t *);
 
 
 typedef int (*__gconv_trans_init_fct) (void **, const char *);
 typedef void (*__gconv_trans_end_fct) (void *);
 
 struct __gconv_trans_data
 {
 
   __gconv_trans_fct __trans_fct;
   __gconv_trans_context_fct __trans_context_fct;
   __gconv_trans_end_fct __trans_end_fct;
   void *__data;
   struct __gconv_trans_data *__next;
 };
 
 
 
 struct __gconv_step
 {
   struct __gconv_loaded_object *__shlib_handle;
   __const char *__modname;
 
   int __counter;
 
   char *__from_name;
   char *__to_name;
 
   __gconv_fct __fct;
   __gconv_init_fct __init_fct;
   __gconv_end_fct __end_fct;
 
 
 
   int __min_needed_from;
   int __max_needed_from;
   int __min_needed_to;
   int __max_needed_to;
 
 
   int __stateful;
 
   void *__data;
 };
 
 
 
 struct __gconv_step_data
 {
   unsigned char *__outbuf;
   unsigned char *__outbufend;
 
 
 
   int __flags;
 
 
 
   int __invocation_counter;
 
 
 
   int __internal_use;
 
   __mbstate_t *__statep;
   __mbstate_t __state;
 
 
 
   struct __gconv_trans_data *__trans;
 };
 
 
 
 typedef struct __gconv_info
 {
   size_t __nsteps;
   struct __gconv_step *__steps;
   __extension__ struct __gconv_step_data __data [];
 } *__gconv_t;
 # 45 "/usr/include/_G_config.h" 2 3
 typedef union
 {
   struct __gconv_info __cd;
   struct
   {
     struct __gconv_info __cd;
     struct __gconv_step_data __data;
   } __combined;
 } _G_iconv_t;
 
 typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
 typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
 typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
 typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
 # 33 "/usr/include/libio.h" 2 3
 # 53 "/usr/include/libio.h" 3
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdarg.h" 1 3
 # 43 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdarg.h" 3
 typedef __builtin_va_list __gnuc_va_list;
 # 54 "/usr/include/libio.h" 2 3
 # 160 "/usr/include/libio.h" 3
 struct _IO_jump_t; struct _IO_FILE;
 # 170 "/usr/include/libio.h" 3
 typedef void _IO_lock_t;
 
 
 
 
 
 struct _IO_marker {
   struct _IO_marker *_next;
   struct _IO_FILE *_sbuf;
 
 
 
   int _pos;
 # 193 "/usr/include/libio.h" 3
 };
 
 
 enum __codecvt_result
 {
   __codecvt_ok,
   __codecvt_partial,
   __codecvt_error,
   __codecvt_noconv
 };
 
 
 
 
 struct _IO_codecvt
 {
   void (*__codecvt_destr) (struct _IO_codecvt *);
   enum __codecvt_result (*__codecvt_do_out) (struct _IO_codecvt *,
                                              __mbstate_t *,
                                              const wchar_t *,
                                              const wchar_t *,
                                              const wchar_t **, char *,
                                              char *, char **);
   enum __codecvt_result (*__codecvt_do_unshift) (struct _IO_codecvt *,
                                                  __mbstate_t *, char *,
                                                  char *, char **);
   enum __codecvt_result (*__codecvt_do_in) (struct _IO_codecvt *,
                                             __mbstate_t *,
                                             const char *, const char *,
                                             const char **, wchar_t *,
                                             wchar_t *, wchar_t **);
   int (*__codecvt_do_encoding) (struct _IO_codecvt *);
   int (*__codecvt_do_always_noconv) (struct _IO_codecvt *);
   int (*__codecvt_do_length) (struct _IO_codecvt *, __mbstate_t *,
                               const char *, const char *, size_t);
   int (*__codecvt_do_max_length) (struct _IO_codecvt *);
 
   _G_iconv_t __cd_in;
   _G_iconv_t __cd_out;
 };
 
 
 struct _IO_wide_data
 {
   wchar_t *_IO_read_ptr;
   wchar_t *_IO_read_end;
   wchar_t *_IO_read_base;
   wchar_t *_IO_write_base;
   wchar_t *_IO_write_ptr;
   wchar_t *_IO_write_end;
   wchar_t *_IO_buf_base;
   wchar_t *_IO_buf_end;
 
   wchar_t *_IO_save_base;
   wchar_t *_IO_backup_base;
 
   wchar_t *_IO_save_end;
 
   __mbstate_t _IO_state;
   __mbstate_t _IO_last_state;
   struct _IO_codecvt _codecvt;
 
   wchar_t _shortbuf[1];
 
   struct _IO_jump_t *_wide_vtable;
 };
 
 
 struct _IO_FILE {
   int _flags;
 
 
 
 
   char* _IO_read_ptr;
   char* _IO_read_end;
   char* _IO_read_base;
   char* _IO_write_base;
   char* _IO_write_ptr;
   char* _IO_write_end;
   char* _IO_buf_base;
   char* _IO_buf_end;
 
   char *_IO_save_base;
   char *_IO_backup_base;
   char *_IO_save_end;
 
   struct _IO_marker *_markers;
 
   struct _IO_FILE *_chain;
 
   int _fileno;
   int _blksize;
   __off_t _old_offset;
 
 
 
   unsigned short _cur_column;
   signed char _vtable_offset;
   char _shortbuf[1];
 
 
 
   _IO_lock_t *_lock;
 # 305 "/usr/include/libio.h" 3
   __off64_t _offset;
 
 
   struct _IO_codecvt *_codecvt;
   struct _IO_wide_data *_wide_data;
 
 
 
 
   int _mode;
 
   char _unused2[15 * sizeof (int) - 2 * sizeof (void *)];
 
 };
 
 
 
 
 
 struct _IO_FILE_plus;
 
 extern struct _IO_FILE_plus _IO_2_1_stdin_;
 extern struct _IO_FILE_plus _IO_2_1_stdout_;
 extern struct _IO_FILE_plus _IO_2_1_stderr_;
 # 344 "/usr/include/libio.h" 3
 typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
 
 
 
 
 
 
 
 typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
                                  size_t __n);
 
 
 
 
 
 
 
 typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);
 
 
 typedef int __io_close_fn (void *__cookie);
 
 
 
 
 typedef __io_read_fn cookie_read_function_t;
 typedef __io_write_fn cookie_write_function_t;
 typedef __io_seek_fn cookie_seek_function_t;
 typedef __io_close_fn cookie_close_function_t;
 
 
 typedef struct
 {
   __io_read_fn *read;
   __io_write_fn *write;
   __io_seek_fn *seek;
   __io_close_fn *close;
 } _IO_cookie_io_functions_t;
 typedef _IO_cookie_io_functions_t cookie_io_functions_t;
 
 struct _IO_cookie_file;
 
 
 extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
                              void *__cookie, _IO_cookie_io_functions_t __fns);
 
 
 
 
 extern "C" {
 
 
 extern int __underflow (_IO_FILE *) throw ();
 extern int __uflow (_IO_FILE *) throw ();
 extern int __overflow (_IO_FILE *, int) throw ();
 extern wint_t __wunderflow (_IO_FILE *) throw ();
 extern wint_t __wuflow (_IO_FILE *) throw ();
 extern wint_t __woverflow (_IO_FILE *, wint_t) throw ();
 # 426 "/usr/include/libio.h" 3
 extern int _IO_getc (_IO_FILE *__fp) throw ();
 extern int _IO_putc (int __c, _IO_FILE *__fp) throw ();
 extern int _IO_feof (_IO_FILE *__fp) throw ();
 extern int _IO_ferror (_IO_FILE *__fp) throw ();
 
 extern int _IO_peekc_locked (_IO_FILE *__fp) throw ();
 
 
 
 
 
 extern void _IO_flockfile (_IO_FILE *) throw ();
 extern void _IO_funlockfile (_IO_FILE *) throw ();
 extern int _IO_ftrylockfile (_IO_FILE *) throw ();
 # 456 "/usr/include/libio.h" 3
 extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
                         __gnuc_va_list, int *__restrict) throw ();
 extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
                          __gnuc_va_list) throw ();
 extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t) throw ();
 extern size_t _IO_sgetn (_IO_FILE *, void *, size_t) throw ();
 
 extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int) throw ();
 extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int) throw ();
 
 extern void _IO_free_backup_area (_IO_FILE *) throw ();
 
 
 extern wint_t _IO_getwc (_IO_FILE *__fp) throw ();
 extern wint_t _IO_putwc (wchar_t __wc, _IO_FILE *__fp) throw ();
 extern int _IO_fwide (_IO_FILE *__fp, int __mode) throw ();
 # 505 "/usr/include/libio.h" 3
 extern int _IO_vfwscanf (_IO_FILE * __restrict, const wchar_t * __restrict,
                          __gnuc_va_list, int *__restrict) throw ();
 extern int _IO_vfwprintf (_IO_FILE *__restrict, const wchar_t *__restrict,
                           __gnuc_va_list) throw ();
 extern __ssize_t _IO_wpadn (_IO_FILE *, wint_t, __ssize_t) throw ();
 extern void _IO_free_wbackup_area (_IO_FILE *) throw ();
 
 
 
 }
 # 75 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 2 3
 
 
 
 
 typedef __gnuc_va_list __not_va_list__;
 # 89 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 3
 typedef _G_fpos_t fpos_t;
 
 
 
 
 typedef _G_fpos64_t fpos64_t;
 # 138 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 3
 # 1 "/usr/include/bits/stdio_lim.h" 1 3
 # 139 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 2 3
 
 
 
 extern FILE *stdin;
 extern FILE *stdout;
 extern FILE *stderr;
 
 
 
 
 
 
 extern int remove (__const char *__filename) throw ();
 
 extern int rename (__const char *__old, __const char *__new) throw ();
 
 
 
 
 extern FILE *tmpfile (void) throw ();
 # 167 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 3
 extern FILE *tmpfile64 (void) throw ();
 
 
 extern char *tmpnam (char *__s) throw ();
 
 
 
 
 extern char *tmpnam_r (char *__s) throw ();
 # 187 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 3
 extern char *tempnam (__const char *__dir, __const char *__pfx)
      throw () __attribute__ ((__malloc__));
 
 
 
 
 extern int fclose (FILE *__stream) throw ();
 
 extern int fflush (FILE *__stream) throw ();
 
 
 
 extern int fflush_unlocked (FILE *__stream) throw ();
 
 
 
 
 extern int fcloseall (void) throw ();
 
 
 
 
 
 extern FILE *fopen (__const char *__restrict __filename,
                     __const char *__restrict __modes) throw ();
 
 extern FILE *freopen (__const char *__restrict __filename,
                       __const char *__restrict __modes,
                       FILE *__restrict __stream) throw ();
 # 231 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 3
 extern FILE *fopen64 (__const char *__restrict __filename,
                       __const char *__restrict __modes) throw ();
 extern FILE *freopen64 (__const char *__restrict __filename,
                         __const char *__restrict __modes,
                         FILE *__restrict __stream) throw ();
 
 
 
 
 extern FILE *fdopen (int __fd, __const char *__modes) throw ();
 
 
 
 
 
 extern FILE *fopencookie (void *__restrict __magic_cookie,
                           __const char *__restrict __modes,
                           _IO_cookie_io_functions_t __io_funcs) throw ();
 
 
 extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes) throw ();
 
 
 
 
 extern FILE *open_memstream (char **__restrict __bufloc,
                              size_t *__restrict __sizeloc) throw ();
 
 
 
 
 
 extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) throw ();
 
 
 
 extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
                     int __modes, size_t __n) throw ();
 
 
 
 
 extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
                        size_t __size) throw ();
 
 
 extern void setlinebuf (FILE *__stream) throw ();
 
 
 
 
 extern int fprintf (FILE *__restrict __stream,
                     __const char *__restrict __format, ...) throw ();
 
 extern int printf (__const char *__restrict __format, ...) throw ();
 
 extern int sprintf (char *__restrict __s,
                     __const char *__restrict __format, ...) throw ();
 
 
 extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
                      __gnuc_va_list __arg) throw ();
 
 extern int vprintf (__const char *__restrict __format, __gnuc_va_list __arg)
      throw ();
 
 extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
                      __gnuc_va_list __arg) throw ();
 
 
 
 extern int snprintf (char *__restrict __s, size_t __maxlen,
                      __const char *__restrict __format, ...)
      throw () __attribute__ ((__format__ (__printf__, 3, 4)));
 
 extern int vsnprintf (char *__restrict __s, size_t __maxlen,
                       __const char *__restrict __format, __gnuc_va_list __arg)
      throw () __attribute__ ((__format__ (__printf__, 3, 0)));
 
 
 
 
 
 extern int vasprintf (char **__restrict __ptr, __const char *__restrict __f,
                       __gnuc_va_list __arg)
      throw () __attribute__ ((__format__ (__printf__, 2, 0)));
 extern int __asprintf (char **__restrict __ptr,
                        __const char *__restrict __fmt, ...)
      throw () __attribute__ ((__format__ (__printf__, 2, 3)));
 extern int asprintf (char **__restrict __ptr,
                      __const char *__restrict __fmt, ...)
      throw () __attribute__ ((__format__ (__printf__, 2, 3)));
 
 
 extern int vdprintf (int __fd, __const char *__restrict __fmt,
                      __gnuc_va_list __arg)
      throw () __attribute__ ((__format__ (__printf__, 2, 0)));
 extern int dprintf (int __fd, __const char *__restrict __fmt, ...)
      throw () __attribute__ ((__format__ (__printf__, 2, 3)));
 
 
 
 
 extern int fscanf (FILE *__restrict __stream,
                    __const char *__restrict __format, ...) throw ();
 
 extern int scanf (__const char *__restrict __format, ...) throw ();
 
 extern int sscanf (__const char *__restrict __s,
                    __const char *__restrict __format, ...) throw ();
 
 
 
 extern int vfscanf (FILE *__restrict __s, __const char *__restrict __format,
                     __gnuc_va_list __arg)
      throw () __attribute__ ((__format__ (__scanf__, 2, 0)));
 
 
 extern int vscanf (__const char *__restrict __format, __gnuc_va_list __arg)
      throw () __attribute__ ((__format__ (__scanf__, 1, 0)));
 
 
 extern int vsscanf (__const char *__restrict __s,
                     __const char *__restrict __format, __gnuc_va_list __arg)
      throw () __attribute__ ((__format__ (__scanf__, 2, 0)));
 
 
 
 
 extern int fgetc (FILE *__stream) throw ();
 extern int getc (FILE *__stream) throw ();
 
 
 extern int getchar (void) throw ();
 
 
 
 
 
 
 
 extern int getc_unlocked (FILE *__stream) throw ();
 extern int getchar_unlocked (void) throw ();
 
 
 
 
 extern int fgetc_unlocked (FILE *__stream) throw ();
 
 
 
 
 extern int fputc (int __c, FILE *__stream) throw ();
 extern int putc (int __c, FILE *__stream) throw ();
 
 
 extern int putchar (int __c) throw ();
 
 
 
 
 
 
 
 extern int fputc_unlocked (int __c, FILE *__stream) throw ();
 
 
 
 
 extern int putc_unlocked (int __c, FILE *__stream) throw ();
 extern int putchar_unlocked (int __c) throw ();
 
 
 
 
 
 extern int getw (FILE *__stream) throw ();
 
 
 extern int putw (int __w, FILE *__stream) throw ();
 
 
 
 
 extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
      throw ();
 
 
 
 extern char *fgets_unlocked (char *__restrict __s, int __n,
                              FILE *__restrict __stream) throw ();
 
 
 
 
 extern char *gets (char *__s) throw ();
 # 435 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 3
 extern __ssize_t __getdelim (char **__restrict __lineptr,
                                size_t *__restrict __n, int __delimiter,
                                FILE *__restrict __stream) throw ();
 extern __ssize_t getdelim (char **__restrict __lineptr,
                              size_t *__restrict __n, int __delimiter,
                              FILE *__restrict __stream) throw ();
 
 
 extern __ssize_t getline (char **__restrict __lineptr,
                             size_t *__restrict __n,
                             FILE *__restrict __stream) throw ();
 
 
 
 
 extern int fputs (__const char *__restrict __s, FILE *__restrict __stream)
      throw ();
 
 
 
 extern int fputs_unlocked (__const char *__restrict __s,
                            FILE *__restrict __stream) throw ();
 
 
 
 extern int puts (__const char *__s) throw ();
 
 
 
 extern int ungetc (int __c, FILE *__stream) throw ();
 
 
 
 extern size_t fread (void *__restrict __ptr, size_t __size,
                      size_t __n, FILE *__restrict __stream) throw ();
 
 extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
                       size_t __n, FILE *__restrict __s) throw ();
 
 
 
 extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
                               size_t __n, FILE *__restrict __stream) throw ();
 extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
                                size_t __n, FILE *__restrict __stream) throw ();
 
 
 
 
 extern int fseek (FILE *__stream, long int __off, int __whence) throw ();
 
 extern long int ftell (FILE *__stream) throw ();
 
 extern void rewind (FILE *__stream) throw ();
 # 498 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 3
 extern int fseeko (FILE *__stream, __off_t __off, int __whence) throw ();
 
 extern __off_t ftello (FILE *__stream) throw ();
 
 
 
 extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos)
      throw ();
 
 extern int fsetpos (FILE *__stream, __const fpos_t *__pos) throw ();
 # 532 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 3
 extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence) throw ();
 extern __off64_t ftello64 (FILE *__stream) throw ();
 extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos)
      throw ();
 extern int fsetpos64 (FILE *__stream, __const fpos64_t *__pos) throw ();
 
 
 
 extern void clearerr (FILE *__stream) throw ();
 
 extern int feof (FILE *__stream) throw ();
 
 extern int ferror (FILE *__stream) throw ();
 
 
 
 extern void clearerr_unlocked (FILE *__stream) throw ();
 extern int feof_unlocked (FILE *__stream) throw ();
 extern int ferror_unlocked (FILE *__stream) throw ();
 
 
 
 
 extern void perror (__const char *__s) throw ();
 
 
 
 
 
 # 1 "/usr/include/bits/sys_errlist.h" 1 3
 # 27 "/usr/include/bits/sys_errlist.h" 3
 extern int sys_nerr;
 extern __const char *__const sys_errlist[];
 
 
 extern int _sys_nerr;
 extern __const char *__const _sys_errlist[];
 # 562 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 2 3
 
 
 
 
 extern int fileno (FILE *__stream) throw ();
 
 
 
 
 extern int fileno_unlocked (FILE *__stream) throw ();
 
 
 
 
 
 
 extern FILE *popen (__const char *__command, __const char *__modes) throw ();
 
 
 extern int pclose (FILE *__stream) throw ();
 
 
 
 
 
 extern char *ctermid (char *__s) throw ();
 
 
 
 
 
 extern char *cuserid (char *__s) throw ();
 
 
 
 
 struct obstack;
 
 
 extern int obstack_printf (struct obstack *__restrict __obstack,
                            __const char *__restrict __format, ...) throw ();
 extern int obstack_vprintf (struct obstack *__restrict __obstack,
                             __const char *__restrict __format,
                             __gnuc_va_list __args) throw ();
 
 
 
 
 
 
 
 extern void flockfile (FILE *__stream) throw ();
 
 
 
 extern int ftrylockfile (FILE *__stream) throw ();
 
 
 extern void funlockfile (FILE *__stream) throw ();
 # 637 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdio.h" 3
 }
 # 53 "/usr/include/c++/3.2/cstdio" 2 3
 # 97 "/usr/include/c++/3.2/cstdio" 3
 namespace std
 {
   using ::FILE;
   using ::fpos_t;
 
   using ::clearerr;
   using ::fclose;
   using ::feof;
   using ::ferror;
   using ::fflush;
   using ::fgetc;
   using ::fgetpos;
   using ::fgets;
   using ::fopen;
   using ::fprintf;
   using ::fputc;
   using ::fputs;
   using ::fread;
   using ::freopen;
   using ::fscanf;
   using ::fseek;
   using ::fsetpos;
   using ::ftell;
   using ::fwrite;
   using ::getc;
   using ::getchar;
   using ::gets;
   using ::perror;
   using ::printf;
   using ::putc;
   using ::putchar;
   using ::puts;
   using ::remove;
   using ::rename;
   using ::rewind;
   using ::scanf;
   using ::setbuf;
   using ::setvbuf;
   using ::sprintf;
   using ::sscanf;
   using ::tmpfile;
   using ::tmpnam;
   using ::ungetc;
   using ::vfprintf;
   using ::vprintf;
   using ::vsprintf;
 }
 # 153 "/usr/include/c++/3.2/cstdio" 3
 namespace __gnu_cxx
 {
   using ::snprintf;
   using ::vfscanf;
   using ::vscanf;
   using ::vsnprintf;
   using ::vsscanf;
 }
 
 namespace std
 {
   using __gnu_cxx::snprintf;
   using __gnu_cxx::vfscanf;
   using __gnu_cxx::vscanf;
   using __gnu_cxx::vsnprintf;
   using __gnu_cxx::vsscanf;
 }
 # 36 "/usr/include/c++/3.2/i386-linux/bits/c++io.h" 2 3
 
 # 1 "/usr/include/c++/3.2/i386-linux/bits/gthr.h" 1 3
 # 98 "/usr/include/c++/3.2/i386-linux/bits/gthr.h" 3
 # 1 "/usr/include/c++/3.2/i386-linux/bits/gthr-default.h" 1 3
 # 37 "/usr/include/c++/3.2/i386-linux/bits/gthr-default.h" 3
 # 1 "/usr/include/pthread.h" 1 3
 # 20 "/usr/include/pthread.h" 3
 # 1 "/usr/include/sched.h" 1 3
 # 29 "/usr/include/sched.h" 3
 # 1 "/usr/include/time.h" 1 3
 # 106 "/usr/include/time.h" 3
 struct timespec
   {
     __time_t tv_sec;
     long int tv_nsec;
   };
 # 30 "/usr/include/sched.h" 2 3
 
 
 # 1 "/usr/include/bits/sched.h" 1 3
 # 47 "/usr/include/bits/sched.h" 3
 struct sched_param
   {
     int __sched_priority;
   };
 
 extern "C" {
 
 
 
 extern int clone (int (*__fn) (void *__arg), void *__child_stack,
                   int __flags, void *__arg) throw ();
 
 
 }
 # 33 "/usr/include/sched.h" 2 3
 
 
 
 
 extern "C" {
 
 
 extern int sched_setparam (__pid_t __pid, __const struct sched_param *__param)
      throw ();
 
 
 extern int sched_getparam (__pid_t __pid, struct sched_param *__param) throw ();
 
 
 extern int sched_setscheduler (__pid_t __pid, int __policy,
                                __const struct sched_param *__param) throw ();
 
 
 extern int sched_getscheduler (__pid_t __pid) throw ();
 
 
 extern int sched_yield (void) throw ();
 
 
 extern int sched_get_priority_max (int __algorithm) throw ();
 
 
 extern int sched_get_priority_min (int __algorithm) throw ();
 
 
 extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) throw ();
 
 }
 # 21 "/usr/include/pthread.h" 2 3
 # 1 "/usr/include/time.h" 1 3
 # 30 "/usr/include/time.h" 3
 extern "C" {
 
 
 
 
 
 
 
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stddef.h" 1 3
 # 39 "/usr/include/time.h" 2 3
 
 
 
 # 1 "/usr/include/bits/time.h" 1 3
 # 43 "/usr/include/time.h" 2 3
 # 59 "/usr/include/time.h" 3
 typedef __clock_t clock_t;
 # 70 "/usr/include/time.h" 3
 typedef __time_t time_t;
 # 82 "/usr/include/time.h" 3
 typedef __clockid_t clockid_t;
 # 94 "/usr/include/time.h" 3
 typedef __timer_t timer_t;
 # 118 "/usr/include/time.h" 3
 struct tm
 {
   int tm_sec;
   int tm_min;
   int tm_hour;
   int tm_mday;
   int tm_mon;
   int tm_year;
   int tm_wday;
   int tm_yday;
   int tm_isdst;
 
 
   long int tm_gmtoff;
   __const char *tm_zone;
 
 
 
 
 };
 
 
 
 
 struct itimerspec
   {
     struct timespec it_interval;
     struct timespec it_value;
   };
 
 
 struct sigevent;
 
 
 
 
 
 typedef __pid_t pid_t;
 
 
 
 
 
 
 
 extern clock_t clock (void) throw ();
 
 
 extern time_t time (time_t *__timer) throw ();
 
 
 extern double difftime (time_t __time1, time_t __time0)
      throw () __attribute__ ((__const__));
 
 
 extern time_t mktime (struct tm *__tp) throw ();
 
 
 
 
 
 extern size_t strftime (char *__restrict __s, size_t __maxsize,
                         __const char *__restrict __format,
                         __const struct tm *__restrict __tp) throw ();
 
 
 
 
 extern char *strptime (__const char *__restrict __s,
                        __const char *__restrict __fmt, struct tm *__tp)
      throw ();
 
 
 
 
 
 extern struct tm *gmtime (__const time_t *__timer) throw ();
 
 
 
 extern struct tm *localtime (__const time_t *__timer) throw ();
 
 
 
 
 extern struct tm *gmtime_r (__const time_t *__restrict __timer,
                             struct tm *__restrict __tp) throw ();
 
 
 
 extern struct tm *localtime_r (__const time_t *__restrict __timer,
                                struct tm *__restrict __tp) throw ();
 
 
 
 
 extern char *asctime (__const struct tm *__tp) throw ();
 
 
 extern char *ctime (__const time_t *__timer) throw ();
 
 
 
 
 
 
 extern char *asctime_r (__const struct tm *__restrict __tp,
                         char *__restrict __buf) throw ();
 
 
 extern char *ctime_r (__const time_t *__restrict __timer,
                       char *__restrict __buf) throw ();
 
 
 
 
 extern char *__tzname[2];
 extern int __daylight;
 extern long int __timezone;
 
 
 
 
 extern char *tzname[2];
 
 
 
 extern void tzset (void) throw ();
 
 
 
 extern int daylight;
 extern long int timezone;
 
 
 
 
 
 extern int stime (__const time_t *__when) throw ();
 # 271 "/usr/include/time.h" 3
 extern time_t timegm (struct tm *__tp) throw ();
 
 
 extern time_t timelocal (struct tm *__tp) throw ();
 
 
 extern int dysize (int __year) throw () __attribute__ ((__const__));
 
 
 
 
 
 extern int nanosleep (__const struct timespec *__requested_time,
                       struct timespec *__remaining) throw ();
 
 
 
 extern int clock_getres (clockid_t __clock_id, struct timespec *__res) throw ();
 
 
 extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) throw ();
 
 
 extern int clock_settime (clockid_t __clock_id, __const struct timespec *__tp)
      throw ();
 
 
 
 extern int clock_nanosleep (clockid_t __clock_id, int __flags,
                             __const struct timespec *__req,
                             struct timespec *__rem) throw ();
 
 
 extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) throw ();
 
 
 
 
 extern int timer_create (clockid_t __clock_id,
                          struct sigevent *__restrict __evp,
                          timer_t *__restrict __timerid) throw ();
 
 
 extern int timer_delete (timer_t __timerid) throw ();
 
 
 extern int timer_settime (timer_t __timerid, int __flags,
                           __const struct itimerspec *__restrict __value,
                           struct itimerspec *__restrict __ovalue) throw ();
 
 
 extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
      throw ();
 
 
 extern int timer_getoverrun (timer_t __timerid) throw ();
 # 342 "/usr/include/time.h" 3
 extern int getdate_err;
 
 
 
 
 
 extern struct tm *getdate (__const char *__string) throw ();
 # 357 "/usr/include/time.h" 3
 extern int getdate_r (__const char *__restrict __string,
                       struct tm *__restrict __resbufp) throw ();
 
 
 
 }
 # 22 "/usr/include/pthread.h" 2 3
 
 
 # 1 "/usr/include/signal.h" 1 3
 # 31 "/usr/include/signal.h" 3
 extern "C" {
 
 # 1 "/usr/include/bits/sigset.h" 1 3
 # 23 "/usr/include/bits/sigset.h" 3
 typedef int __sig_atomic_t;
 
 
 
 
 typedef struct
   {
     unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
   } __sigset_t;
 # 34 "/usr/include/signal.h" 2 3
 # 48 "/usr/include/signal.h" 3
 typedef __sigset_t sigset_t;
 # 371 "/usr/include/signal.h" 3
 }
 # 25 "/usr/include/pthread.h" 2 3
 # 1 "/usr/include/bits/pthreadtypes.h" 1 3
 # 26 "/usr/include/pthread.h" 2 3
 # 1 "/usr/include/bits/initspin.h" 1 3
 # 27 "/usr/include/pthread.h" 2 3
 
 
 extern "C" {
 # 59 "/usr/include/pthread.h" 3
 enum
 {
   PTHREAD_CREATE_JOINABLE,
 
   PTHREAD_CREATE_DETACHED
 
 };
 
 enum
 {
   PTHREAD_INHERIT_SCHED,
 
   PTHREAD_EXPLICIT_SCHED
 
 };
 
 enum
 {
   PTHREAD_SCOPE_SYSTEM,
 
   PTHREAD_SCOPE_PROCESS
 
 };
 
 enum
 {
   PTHREAD_MUTEX_TIMED_NP,
   PTHREAD_MUTEX_RECURSIVE_NP,
   PTHREAD_MUTEX_ERRORCHECK_NP,
   PTHREAD_MUTEX_ADAPTIVE_NP
 
   ,
   PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP,
   PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
   PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
   PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL
 
 
 
   , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_ADAPTIVE_NP
 
 };
 
 enum
 {
   PTHREAD_PROCESS_PRIVATE,
 
   PTHREAD_PROCESS_SHARED
 
 };
 
 
 enum
 {
   PTHREAD_RWLOCK_PREFER_READER_NP,
   PTHREAD_RWLOCK_PREFER_WRITER_NP,
   PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,
   PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_WRITER_NP
 };
 # 131 "/usr/include/pthread.h" 3
 struct _pthread_cleanup_buffer
 {
   void (*__routine) (void *);
   void *__arg;
   int __canceltype;
   struct _pthread_cleanup_buffer *__prev;
 };
 
 
 
 enum
 {
   PTHREAD_CANCEL_ENABLE,
 
   PTHREAD_CANCEL_DISABLE
 
 };
 enum
 {
   PTHREAD_CANCEL_DEFERRED,
 
   PTHREAD_CANCEL_ASYNCHRONOUS
 
 };
 # 163 "/usr/include/pthread.h" 3
 extern int pthread_create (pthread_t *__restrict __thread,
                            __const pthread_attr_t *__restrict __attr,
                            void *(*__start_routine) (void *),
                            void *__restrict __arg) throw ();
 
 
 extern pthread_t pthread_self (void) throw ();
 
 
 extern int pthread_equal (pthread_t __thread1, pthread_t __thread2) throw ();
 
 
 extern void pthread_exit (void *__retval)
      throw () __attribute__ ((__noreturn__));
 
 
 
 
 extern int pthread_join (pthread_t __th, void **__thread_return) throw ();
 
 
 
 
 
 extern int pthread_detach (pthread_t __th) throw ();
 
 
 
 
 
 
 
 extern int pthread_attr_init (pthread_attr_t *__attr) throw ();
 
 
 extern int pthread_attr_destroy (pthread_attr_t *__attr) throw ();
 
 
 extern int pthread_attr_setdetachstate (pthread_attr_t *__attr,
                                         int __detachstate) throw ();
 
 
 extern int pthread_attr_getdetachstate (__const pthread_attr_t *__attr,
                                         int *__detachstate) throw ();
 
 
 extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
                                        __const struct sched_param *__restrict
                                        __param) throw ();
 
 
 extern int pthread_attr_getschedparam (__const pthread_attr_t *__restrict
                                        __attr,
                                        struct sched_param *__restrict __param)
      throw ();
 
 
 extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy)
      throw ();
 
 
 extern int pthread_attr_getschedpolicy (__const pthread_attr_t *__restrict
                                         __attr, int *__restrict __policy)
      throw ();
 
 
 extern int pthread_attr_setinheritsched (pthread_attr_t *__attr,
                                          int __inherit) throw ();
 
 
 extern int pthread_attr_getinheritsched (__const pthread_attr_t *__restrict
                                          __attr, int *__restrict __inherit)
      throw ();
 
 
 extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope)
      throw ();
 
 
 extern int pthread_attr_getscope (__const pthread_attr_t *__restrict __attr,
                                   int *__restrict __scope) throw ();
 
 
 
 extern int pthread_attr_setguardsize (pthread_attr_t *__attr,
                                       size_t __guardsize) throw ();
 
 
 extern int pthread_attr_getguardsize (__const pthread_attr_t *__restrict
                                       __attr, size_t *__restrict __guardsize)
      throw ();
 
 
 
 
 
 
 extern int pthread_attr_setstackaddr (pthread_attr_t *__attr,
                                       void *__stackaddr) throw ();
 
 
 extern int pthread_attr_getstackaddr (__const pthread_attr_t *__restrict
                                       __attr, void **__restrict __stackaddr)
      throw ();
 
 
 
 
 
 extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr,
                                   size_t __stacksize) throw ();
 
 
 extern int pthread_attr_getstack (__const pthread_attr_t *__restrict __attr,
                                   void **__restrict __stackaddr,
                                   size_t *__restrict __stacksize) throw ();
 
 
 
 
 
 extern int pthread_attr_setstacksize (pthread_attr_t *__attr,
                                       size_t __stacksize) throw ();
 
 
 extern int pthread_attr_getstacksize (__const pthread_attr_t *__restrict
                                       __attr, size_t *__restrict __stacksize)
      throw ();
 
 
 
 extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr) throw ();
 
 
 
 
 
 
 extern int pthread_setschedparam (pthread_t __target_thread, int __policy,
                                   __const struct sched_param *__param)
      throw ();
 
 
 extern int pthread_getschedparam (pthread_t __target_thread,
                                   int *__restrict __policy,
                                   struct sched_param *__restrict __param)
      throw ();
 
 
 
 extern int pthread_getconcurrency (void) throw ();
 
 
 extern int pthread_setconcurrency (int __level) throw ();
 
 
 
 
 
 
 
 extern int pthread_yield (void) throw ();
 
 
 
 
 
 
 extern int pthread_mutex_init (pthread_mutex_t *__restrict __mutex,
                                __const pthread_mutexattr_t *__restrict
                                __mutex_attr) throw ();
 
 
 extern int pthread_mutex_destroy (pthread_mutex_t *__mutex) throw ();
 
 
 extern int pthread_mutex_trylock (pthread_mutex_t *__mutex) throw ();
 
 
 extern int pthread_mutex_lock (pthread_mutex_t *__mutex) throw ();
 
 
 
 extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
                                     __const struct timespec *__restrict
                                     __abstime) throw ();
 
 
 
 extern int pthread_mutex_unlock (pthread_mutex_t *__mutex) throw ();
 
 
 
 
 
 
 extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr) throw ();
 
 
 extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr) throw ();
 
 
 extern int pthread_mutexattr_getpshared (__const pthread_mutexattr_t *
                                          __restrict __attr,
                                          int *__restrict __pshared) throw ();
 
 
 extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr,
                                          int __pshared) throw ();
 
 
 
 
 
 extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind)
      throw ();
 
 
 extern int pthread_mutexattr_gettype (__const pthread_mutexattr_t *__restrict
                                       __attr, int *__restrict __kind) throw ();
 
 
 
 
 
 
 
 extern int pthread_cond_init (pthread_cond_t *__restrict __cond,
                               __const pthread_condattr_t *__restrict
                               __cond_attr) throw ();
 
 
 extern int pthread_cond_destroy (pthread_cond_t *__cond) throw ();
 
 
 extern int pthread_cond_signal (pthread_cond_t *__cond) throw ();
 
 
 extern int pthread_cond_broadcast (pthread_cond_t *__cond) throw ();
 
 
 
 extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
                               pthread_mutex_t *__restrict __mutex) throw ();
 
 
 
 
 
 extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
                                    pthread_mutex_t *__restrict __mutex,
                                    __const struct timespec *__restrict
                                    __abstime) throw ();
 
 
 
 
 extern int pthread_condattr_init (pthread_condattr_t *__attr) throw ();
 
 
 extern int pthread_condattr_destroy (pthread_condattr_t *__attr) throw ();
 
 
 extern int pthread_condattr_getpshared (__const pthread_condattr_t *
                                         __restrict __attr,
                                         int *__restrict __pshared) throw ();
 
 
 extern int pthread_condattr_setpshared (pthread_condattr_t *__attr,
                                         int __pshared) throw ();
 
 
 
 
 
 
 
 extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
                                 __const pthread_rwlockattr_t *__restrict
                                 __attr) throw ();
 
 
 extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock) throw ();
 
 
 extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock) throw ();
 
 
 extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock) throw ();
 
 
 
 extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
                                        __const struct timespec *__restrict
                                        __abstime) throw ();
 
 
 
 extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock) throw ();
 
 
 extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock) throw ();
 
 
 
 extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
                                        __const struct timespec *__restrict
                                        __abstime) throw ();
 
 
 
 extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock) throw ();
 
 
 
 
 
 extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr) throw ();
 
 
 extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr) throw ();
 
 
 extern int pthread_rwlockattr_getpshared (__const pthread_rwlockattr_t *
                                           __restrict __attr,
                                           int *__restrict __pshared) throw ();
 
 
 extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr,
                                           int __pshared) throw ();
 
 
 extern int pthread_rwlockattr_getkind_np (__const pthread_rwlockattr_t *__attr,
                                           int *__pref) throw ();
 
 
 extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr,
                                           int __pref) throw ();
 # 509 "/usr/include/pthread.h" 3
 extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared)
      throw ();
 
 
 extern int pthread_spin_destroy (pthread_spinlock_t *__lock) throw ();
 
 
 extern int pthread_spin_lock (pthread_spinlock_t *__lock) throw ();
 
 
 extern int pthread_spin_trylock (pthread_spinlock_t *__lock) throw ();
 
 
 extern int pthread_spin_unlock (pthread_spinlock_t *__lock) throw ();
 
 
 
 
 extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
                                  __const pthread_barrierattr_t *__restrict
                                  __attr, unsigned int __count) throw ();
 
 extern int pthread_barrier_destroy (pthread_barrier_t *__barrier) throw ();
 
 extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr) throw ();
 
 extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr) throw ();
 
 extern int pthread_barrierattr_getpshared (__const pthread_barrierattr_t *
                                            __restrict __attr,
                                            int *__restrict __pshared) throw ();
 
 extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr,
                                            int __pshared) throw ();
 
 extern int pthread_barrier_wait (pthread_barrier_t *__barrier) throw ();
 # 556 "/usr/include/pthread.h" 3
 extern int pthread_key_create (pthread_key_t *__key,
                                void (*__destr_function) (void *)) throw ();
 
 
 extern int pthread_key_delete (pthread_key_t __key) throw ();
 
 
 extern int pthread_setspecific (pthread_key_t __key,
                                 __const void *__pointer) throw ();
 
 
 extern void *pthread_getspecific (pthread_key_t __key) throw ();
 # 576 "/usr/include/pthread.h" 3
 extern int pthread_once (pthread_once_t *__once_control,
                          void (*__init_routine) (void)) throw ();
 
 
 
 
 
 
 extern int pthread_setcancelstate (int __state, int *__oldstate) throw ();
 
 
 
 extern int pthread_setcanceltype (int __type, int *__oldtype) throw ();
 
 
 extern int pthread_cancel (pthread_t __thread) throw ();
 
 
 
 
 extern void pthread_testcancel (void) throw ();
 # 610 "/usr/include/pthread.h" 3
 extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *__buffer,
                                    void (*__routine) (void *),
                                    void *__arg) throw ();
 
 
 
 
 
 
 
 extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *__buffer,
                                   int __execute) throw ();
 # 631 "/usr/include/pthread.h" 3
 extern void _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *__buffer,
                                          void (*__routine) (void *),
                                          void *__arg) throw ();
 # 642 "/usr/include/pthread.h" 3
 extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *__buffer,
                                           int __execute) throw ();
 
 
 
 
 
 extern int pthread_getcpuclockid (pthread_t __thread_id,
                                   clockid_t *__clock_id) throw ();
 
 
 
 
 # 1 "/usr/include/bits/sigthread.h" 1 3
 # 31 "/usr/include/bits/sigthread.h" 3
 extern int pthread_sigmask (int __how,
                             __const __sigset_t *__restrict __newmask,
                             __sigset_t *__restrict __oldmask)throw ();
 
 
 extern int pthread_kill (pthread_t __thread, int __signo) throw ();
 # 656 "/usr/include/pthread.h" 2 3
 # 671 "/usr/include/pthread.h" 3
 extern int pthread_atfork (void (*__prepare) (void),
                            void (*__parent) (void),
                            void (*__child) (void)) throw ();
 
 
 
 
 extern void pthread_kill_other_threads_np (void) throw ();
 
 }
 # 38 "/usr/include/c++/3.2/i386-linux/bits/gthr-default.h" 2 3
 
 typedef pthread_key_t __gthread_key_t;
 typedef pthread_once_t __gthread_once_t;
 typedef pthread_mutex_t __gthread_mutex_t;
 
 
 
 
 
 
 #pragma weak pthread_once
 #pragma weak pthread_key_create
 #pragma weak pthread_key_delete
 #pragma weak pthread_getspecific
 #pragma weak pthread_setspecific
 #pragma weak pthread_create
 
 #pragma weak pthread_mutex_lock 
 #pragma weak pthread_mutex_trylock 
 #pragma weak pthread_mutex_unlock 
 # 80 "/usr/include/c++/3.2/i386-linux/bits/gthr-default.h" 3
 static inline int
 __gthread_active_p (void)
 {
   static void *const __gthread_active_ptr = (void *) &pthread_create;
   return __gthread_active_ptr != 0;
 }
 # 437 "/usr/include/c++/3.2/i386-linux/bits/gthr-default.h" 3
 static inline int
 __gthread_once (__gthread_once_t *once, void (*func) (void))
 {
   if (__gthread_active_p ())
     return pthread_once (once, func);
   else
     return -1;
 }
 
 static inline int
 __gthread_key_create (__gthread_key_t *key, void (*dtor) (void *))
 {
   return pthread_key_create (key, dtor);
 }
 
 static inline int
 __gthread_key_dtor (__gthread_key_t key, void *ptr)
 {
 
   if (ptr)
     return pthread_setspecific (key, 0);
   else
     return 0;
 }
 
 static inline int
 __gthread_key_delete (__gthread_key_t key)
 {
   return pthread_key_delete (key);
 }
 
 static inline void *
 __gthread_getspecific (__gthread_key_t key)
 {
   return pthread_getspecific (key);
 }
 
 static inline int
 __gthread_setspecific (__gthread_key_t key, const void *ptr)
 {
   return pthread_setspecific (key, ptr);
 }
 
 static inline int
 __gthread_mutex_lock (__gthread_mutex_t *mutex)
 {
   if (__gthread_active_p ())
     return pthread_mutex_lock (mutex);
   else
     return 0;
 }
 
 static inline int
 __gthread_mutex_trylock (__gthread_mutex_t *mutex)
 {
   if (__gthread_active_p ())
     return pthread_mutex_trylock (mutex);
   else
     return 0;
 }
 
 static inline int
 __gthread_mutex_unlock (__gthread_mutex_t *mutex)
 {
   if (__gthread_active_p ())
     return pthread_mutex_unlock (mutex);
   else
     return 0;
 }
 # 99 "/usr/include/c++/3.2/i386-linux/bits/gthr.h" 2 3
 # 38 "/usr/include/c++/3.2/i386-linux/bits/c++io.h" 2 3
 
 namespace std
 {
 
   typedef long streamoff;
   typedef ptrdiff_t streamsize;
 
   typedef ptrdiff_t wstreamsize;
 
   typedef fpos_t __c_streampos;
 
   typedef __gthread_mutex_t __c_lock;
 
 
   typedef FILE __c_file;
 
 
   struct __ios_flags
   {
     typedef short __int_type;
 
     static const __int_type _S_boolalpha = 0x0001;
     static const __int_type _S_dec = 0x0002;
     static const __int_type _S_fixed = 0x0004;
     static const __int_type _S_hex = 0x0008;
     static const __int_type _S_internal = 0x0010;
     static const __int_type _S_left = 0x0020;
     static const __int_type _S_oct = 0x0040;
     static const __int_type _S_right = 0x0080;
     static const __int_type _S_scientific = 0x0100;
     static const __int_type _S_showbase = 0x0200;
     static const __int_type _S_showpoint = 0x0400;
     static const __int_type _S_showpos = 0x0800;
     static const __int_type _S_skipws = 0x1000;
     static const __int_type _S_unitbuf = 0x2000;
     static const __int_type _S_uppercase = 0x4000;
     static const __int_type _S_adjustfield = 0x0020 | 0x0080 | 0x0010;
     static const __int_type _S_basefield = 0x0002 | 0x0040 | 0x0008;
     static const __int_type _S_floatfield = 0x0100 | 0x0004;
 
 
     static const __int_type _S_badbit = 0x01;
     static const __int_type _S_eofbit = 0x02;
     static const __int_type _S_failbit = 0x04;
 
 
     static const __int_type _S_app = 0x01;
     static const __int_type _S_ate = 0x02;
     static const __int_type _S_bin = 0x04;
     static const __int_type _S_in = 0x08;
     static const __int_type _S_out = 0x10;
     static const __int_type _S_trunc = 0x20;
   };
 }
 # 45 "/usr/include/c++/3.2/bits/fpos.h" 2 3
 # 1 "/usr/include/c++/3.2/cwchar" 1 3
 # 48 "/usr/include/c++/3.2/cwchar" 3
 
 
 
 # 1 "/usr/include/c++/3.2/ctime" 1 3
 # 48 "/usr/include/c++/3.2/ctime" 3
 # 64 "/usr/include/c++/3.2/ctime" 3
 namespace std
 {
   using ::clock_t;
   using ::time_t;
   using ::tm;
 
   using ::clock;
   using ::difftime;
   using ::mktime;
   using ::time;
   using ::asctime;
   using ::ctime;
   using ::gmtime;
   using ::localtime;
   using ::strftime;
 }
 # 52 "/usr/include/c++/3.2/cwchar" 2 3
 
 
 # 1 "/usr/include/wchar.h" 1 3
 # 40 "/usr/include/wchar.h" 3
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stdarg.h" 1 3
 # 41 "/usr/include/wchar.h" 2 3
 
 
 
 
 
 
 
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stddef.h" 1 3
 # 49 "/usr/include/wchar.h" 2 3
 # 85 "/usr/include/wchar.h" 3
 typedef __mbstate_t mbstate_t;
 # 105 "/usr/include/wchar.h" 3
 struct tm;
 
 
 extern "C" {
 
 
 extern wchar_t *wcscpy (wchar_t *__restrict __dest,
                         __const wchar_t *__restrict __src) throw ();
 
 extern wchar_t *wcsncpy (wchar_t *__restrict __dest,
                          __const wchar_t *__restrict __src, size_t __n)
      throw ();
 
 
 extern wchar_t *wcscat (wchar_t *__restrict __dest,
                         __const wchar_t *__restrict __src) throw ();
 
 extern wchar_t *wcsncat (wchar_t *__restrict __dest,
                          __const wchar_t *__restrict __src, size_t __n)
      throw ();
 
 
 extern int wcscmp (__const wchar_t *__s1, __const wchar_t *__s2)
      throw () __attribute__ ((__pure__));
 
 extern int wcsncmp (__const wchar_t *__s1, __const wchar_t *__s2, size_t __n)
      throw () __attribute__ ((__pure__));
 
 
 
 extern int wcscasecmp (__const wchar_t *__s1, __const wchar_t *__s2) throw ();
 
 
 extern int wcsncasecmp (__const wchar_t *__s1, __const wchar_t *__s2,
                         size_t __n) throw ();
 
 
 
 
 
 extern int __wcscasecmp_l (__const wchar_t *__s1, __const wchar_t *__s2,
                            __locale_t __loc) throw ();
 
 extern int __wcsncasecmp_l (__const wchar_t *__s1, __const wchar_t *__s2,
                             size_t __n, __locale_t __loc) throw ();
 
 
 
 
 extern int wcscoll (__const wchar_t *__s1, __const wchar_t *__s2) throw ();
 
 
 
 extern size_t wcsxfrm (wchar_t *__restrict __s1,
                        __const wchar_t *__restrict __s2, size_t __n) throw ();
 
 
 
 
 
 
 
 extern int __wcscoll_l (__const wchar_t *__s1, __const wchar_t *__s2,
                         __locale_t __loc) throw ();
 
 
 
 extern size_t __wcsxfrm_l (wchar_t *__s1, __const wchar_t *__s2,
                            size_t __n, __locale_t __loc) throw ();
 
 
 extern wchar_t *wcsdup (__const wchar_t *__s) throw () __attribute__ ((__malloc__));
 
 
 
 extern wchar_t *wcschr (__const wchar_t *__wcs, wchar_t __wc)
      throw () __attribute__ ((__pure__));
 
 extern wchar_t *wcsrchr (__const wchar_t *__wcs, wchar_t __wc)
      throw () __attribute__ ((__pure__));
 
 
 
 
 extern wchar_t *wcschrnul (__const wchar_t *__s, wchar_t __wc)
      throw () __attribute__ ((__pure__));
 
 
 
 
 extern size_t wcscspn (__const wchar_t *__wcs, __const wchar_t *__reject)
      throw () __attribute__ ((__pure__));
 
 
 extern size_t wcsspn (__const wchar_t *__wcs, __const wchar_t *__accept)
      throw () __attribute__ ((__pure__));
 
 extern wchar_t *wcspbrk (__const wchar_t *__wcs, __const wchar_t *__accept)
      throw () __attribute__ ((__pure__));
 
 extern wchar_t *wcsstr (__const wchar_t *__haystack, __const wchar_t *__needle)
      throw () __attribute__ ((__pure__));
 
 
 
 extern wchar_t *wcswcs (__const wchar_t *__haystack, __const wchar_t *__needle)
      throw () __attribute__ ((__pure__));
 
 
 
 extern wchar_t *wcstok (wchar_t *__restrict __s,
                         __const wchar_t *__restrict __delim,
                         wchar_t **__restrict __ptr) throw ();
 
 
 extern size_t wcslen (__const wchar_t *__s) throw () __attribute__ ((__pure__));
 
 
 
 extern size_t wcsnlen (__const wchar_t *__s, size_t __maxlen)
      throw () __attribute__ ((__pure__));
 
 
 
 
 extern wchar_t *wmemchr (__const wchar_t *__s, wchar_t __c, size_t __n)
      throw () __attribute__ ((__pure__));
 
 
 extern int wmemcmp (__const wchar_t *__restrict __s1,
                     __const wchar_t *__restrict __s2, size_t __n)
      throw () __attribute__ ((__pure__));
 
 
 extern wchar_t *wmemcpy (wchar_t *__restrict __s1,
                          __const wchar_t *__restrict __s2, size_t __n) throw ();
 
 
 
 extern wchar_t *wmemmove (wchar_t *__s1, __const wchar_t *__s2, size_t __n)
      throw ();
 
 
 extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) throw ();
 
 
 
 
 extern wchar_t *wmempcpy (wchar_t *__restrict __s1,
                           __const wchar_t *__restrict __s2, size_t __n)
      throw ();
 
 
 
 
 
 extern wint_t btowc (int __c) throw ();
 
 
 
 extern int wctob (wint_t __c) throw ();
 
 
 
 extern int mbsinit (__const mbstate_t *__ps) throw () __attribute__ ((__pure__));
 
 
 
 extern size_t mbrtowc (wchar_t *__restrict __pwc,
                        __const char *__restrict __s, size_t __n,
                        mbstate_t *__p) throw ();
 
 
 extern size_t wcrtomb (char *__restrict __s, wchar_t __wc,
                        mbstate_t *__restrict __ps) throw ();
 
 
 extern size_t __mbrlen (__const char *__restrict __s, size_t __n,
                         mbstate_t *__restrict __ps) throw ();
 extern size_t mbrlen (__const char *__restrict __s, size_t __n,
                       mbstate_t *__restrict __ps) throw ();
 # 297 "/usr/include/wchar.h" 3
 extern size_t mbsrtowcs (wchar_t *__restrict __dst,
                          __const char **__restrict __src, size_t __len,
                          mbstate_t *__restrict __ps) throw ();
 
 
 
 extern size_t wcsrtombs (char *__restrict __dst,
                          __const wchar_t **__restrict __src, size_t __len,
                          mbstate_t *__restrict __ps) throw ();
 
 
 
 
 
 extern size_t mbsnrtowcs (wchar_t *__restrict __dst,
                           __const char **__restrict __src, size_t __nmc,
                           size_t __len, mbstate_t *__restrict __ps) throw ();
 
 
 
 extern size_t wcsnrtombs (char *__restrict __dst,
                           __const wchar_t **__restrict __src,
                           size_t __nwc, size_t __len,
                           mbstate_t *__restrict __ps) throw ();
 
 
 
 
 
 
 extern int wcwidth (wchar_t __c) throw ();
 
 
 
 extern int wcswidth (__const wchar_t *__s, size_t __n) throw ();
 
 
 
 
 
 extern double wcstod (__const wchar_t *__restrict __nptr,
                       wchar_t **__restrict __endptr) throw ();
 
 
 
 extern float wcstof (__const wchar_t *__restrict __nptr,
                      wchar_t **__restrict __endptr) throw ();
 extern long double wcstold (__const wchar_t *__restrict __nptr,
                             wchar_t **__restrict __endptr) throw ();
 
 
 
 
 
 extern long int wcstol (__const wchar_t *__restrict __nptr,
                         wchar_t **__restrict __endptr, int __base) throw ();
 
 
 
 extern unsigned long int wcstoul (__const wchar_t *__restrict __nptr,
                                   wchar_t **__restrict __endptr, int __base)
      throw ();
 
 
 
 
 __extension__
 extern long long int wcstoq (__const wchar_t *__restrict __nptr,
                              wchar_t **__restrict __endptr, int __base)
      throw ();
 
 
 
 __extension__
 extern unsigned long long int wcstouq (__const wchar_t *__restrict __nptr,
                                        wchar_t **__restrict __endptr,
                                        int __base) throw ();
 
 
 
 
 
 __extension__
 extern long long int wcstoll (__const wchar_t *__restrict __nptr,
                               wchar_t **__restrict __endptr, int __base)
      throw ();
 
 
 
 __extension__
 extern unsigned long long int wcstoull (__const wchar_t *__restrict __nptr,
                                         wchar_t **__restrict __endptr,
                                         int __base) throw ();
 # 410 "/usr/include/wchar.h" 3
 extern long int __wcstol_l (__const wchar_t *__restrict __nptr,
                             wchar_t **__restrict __endptr, int __base,
                             __locale_t __loc) throw ();
 
 extern unsigned long int __wcstoul_l (__const wchar_t *__restrict __nptr,
                                       wchar_t **__restrict __endptr,
                                       int __base, __locale_t __loc) throw ();
 
 __extension__
 extern long long int __wcstoll_l (__const wchar_t *__restrict __nptr,
                                   wchar_t **__restrict __endptr,
                                   int __base, __locale_t __loc) throw ();
 
 __extension__
 extern unsigned long long int __wcstoull_l (__const wchar_t *__restrict __nptr,
                                             wchar_t **__restrict __endptr,
                                             int __base, __locale_t __loc)
      throw ();
 
 extern double __wcstod_l (__const wchar_t *__restrict __nptr,
                           wchar_t **__restrict __endptr, __locale_t __loc)
      throw ();
 
 extern float __wcstof_l (__const wchar_t *__restrict __nptr,
                          wchar_t **__restrict __endptr, __locale_t __loc)
      throw ();
 
 extern long double __wcstold_l (__const wchar_t *__restrict __nptr,
                                 wchar_t **__restrict __endptr,
                                 __locale_t __loc) throw ();
 
 
 
 
 
 extern double __wcstod_internal (__const wchar_t *__restrict __nptr,
                                  wchar_t **__restrict __endptr, int __group)
      throw ();
 extern float __wcstof_internal (__const wchar_t *__restrict __nptr,
                                 wchar_t **__restrict __endptr, int __group)
      throw ();
 extern long double __wcstold_internal (__const wchar_t *__restrict __nptr,
                                        wchar_t **__restrict __endptr,
                                        int __group) throw ();
 
 
 extern long int __wcstol_internal (__const wchar_t *__restrict __nptr,
                                    wchar_t **__restrict __endptr,
                                    int __base, int __group) throw ();
 
 
 
 extern unsigned long int __wcstoul_internal (__const wchar_t *__restrict __npt,
                                              wchar_t **__restrict __endptr,
                                              int __base, int __group) throw ();
 
 
 
 __extension__
 extern long long int __wcstoll_internal (__const wchar_t *__restrict __nptr,
                                          wchar_t **__restrict __endptr,
                                          int __base, int __group) throw ();
 
 
 
 __extension__
 extern unsigned long long int __wcstoull_internal (__const wchar_t *
                                                    __restrict __nptr,
                                                    wchar_t **
                                                    __restrict __endptr,
                                                    int __base,
                                                    int __group) throw ();
 # 528 "/usr/include/wchar.h" 3
 extern wchar_t *wcpcpy (wchar_t *__dest, __const wchar_t *__src) throw ();
 
 
 
 extern wchar_t *wcpncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n)
      throw ();
 
 
 
 
 
 
 
 extern int fwide (__FILE *__fp, int __mode) throw ();
 
 
 
 extern int fwprintf (__FILE *__restrict __stream,
                      __const wchar_t *__restrict __format, ...)
      throw () ;
 
 extern int wprintf (__const wchar_t *__restrict __format, ...)
      throw () ;
 
 extern int swprintf (wchar_t *__restrict __s, size_t __n,
                      __const wchar_t *__restrict __format, ...)
      throw () ;
 
 
 extern int vfwprintf (__FILE *__restrict __s,
                       __const wchar_t *__restrict __format,
                       __gnuc_va_list __arg)
      throw () ;
 
 extern int vwprintf (__const wchar_t *__restrict __format,
                      __gnuc_va_list __arg)
      throw () ;
 
 
 extern int vswprintf (wchar_t *__restrict __s, size_t __n,
                       __const wchar_t *__restrict __format,
                       __gnuc_va_list __arg)
      throw () ;
 
 
 
 extern int fwscanf (__FILE *__restrict __stream,
                     __const wchar_t *__restrict __format, ...)
      throw () ;
 
 extern int wscanf (__const wchar_t *__restrict __format, ...)
      throw () ;
 
 extern int swscanf (__const wchar_t *__restrict __s,
                     __const wchar_t *__restrict __format, ...)
      throw () ;
 
 
 
 
 extern int vfwscanf (__FILE *__restrict __s,
                      __const wchar_t *__restrict __format,
                      __gnuc_va_list __arg)
      throw () ;
 
 extern int vwscanf (__const wchar_t *__restrict __format,
                     __gnuc_va_list __arg)
      throw () ;
 
 extern int vswscanf (__const wchar_t *__restrict __s,
                      __const wchar_t *__restrict __format,
                      __gnuc_va_list __arg)
      throw () ;
 
 
 
 
 extern wint_t fgetwc (__FILE *__stream) throw ();
 extern wint_t getwc (__FILE *__stream) throw ();
 
 
 extern wint_t getwchar (void) throw ();
 
 
 
 extern wint_t fputwc (wchar_t __wc, __FILE *__stream) throw ();
 extern wint_t putwc (wchar_t __wc, __FILE *__stream) throw ();
 
 
 extern wint_t putwchar (wchar_t __wc) throw ();
 
 
 
 
 extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n,
                         __FILE *__restrict __stream) throw ();
 
 
 extern int fputws (__const wchar_t *__restrict __ws,
                    __FILE *__restrict __stream) throw ();
 
 
 
 extern wint_t ungetwc (wint_t __wc, __FILE *__stream) throw ();
 
 
 
 
 
 extern wint_t getwc_unlocked (__FILE *__stream) throw ();
 extern wint_t getwchar_unlocked (void) throw ();
 
 
 extern wint_t fgetwc_unlocked (__FILE *__stream) throw ();
 
 
 extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream) throw ();
 
 
 
 extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream) throw ();
 extern wint_t putwchar_unlocked (wchar_t __wc) throw ();
 
 
 
 extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n,
                                  __FILE *__restrict __stream) throw ();
 
 
 extern int fputws_unlocked (__const wchar_t *__restrict __ws,
                             __FILE *__restrict __stream) throw ();
 
 
 
 
 
 
 extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize,
                         __const wchar_t *__restrict __format,
                         __const struct tm *__restrict __tp) throw ();
 # 680 "/usr/include/wchar.h" 3
 }
 # 55 "/usr/include/c++/3.2/cwchar" 2 3
 # 69 "/usr/include/c++/3.2/cwchar" 3
 namespace std
 {
   using ::mbstate_t;
 }
 # 133 "/usr/include/c++/3.2/cwchar" 3
 namespace std
 {
   using ::wint_t;
 
   using ::btowc;
   using ::fgetwc;
   using ::fgetws;
   using ::fputwc;
   using ::fputws;
   using ::fwide;
   using ::fwprintf;
   using ::fwscanf;
   using ::getwc;
   using ::getwchar;
   using ::mbrlen;
   using ::mbrtowc;
   using ::mbsinit;
   using ::mbsrtowcs;
   using ::putwc;
   using ::putwchar;
   using ::swprintf;
   using ::swscanf;
   using ::ungetwc;
   using ::vfwprintf;
   using ::vfwscanf;
   using ::vswprintf;
   using ::vswscanf;
   using ::vwprintf;
   using ::vwscanf;
   using ::wcrtomb;
   using ::wcscat;
   using ::wcscmp;
   using ::wcscoll;
   using ::wcscpy;
   using ::wcscspn;
   using ::wcsftime;
   using ::wcslen;
   using ::wcsncat;
   using ::wcsncmp;
   using ::wcsncpy;
   using ::wcsrtombs;
   using ::wcsspn;
   using ::wcstod;
   using ::wcstof;
   using ::wcstok;
   using ::wcstol;
   using ::wcstoul;
   using ::wcsxfrm;
   using ::wctob;
   using ::wmemcmp;
   using ::wmemcpy;
   using ::wmemmove;
   using ::wmemset;
   using ::wprintf;
   using ::wscanf;
 
   using ::wcschr;
 
   inline wchar_t*
   wcschr(wchar_t* __p, wchar_t __c)
   { return wcschr(const_cast<const wchar_t*>(__p), __c); }
 
   using ::wcspbrk;
 
   inline wchar_t*
   wcspbrk(wchar_t* __s1, wchar_t* __s2)
   { return wcspbrk(const_cast<const wchar_t*>(__s1), __s2); }
 
   using ::wcsrchr;
 
   inline wchar_t*
   wcsrchr(wchar_t* __p, wchar_t __c)
   { return wcsrchr(const_cast<const wchar_t*>(__p), __c); }
 
   using ::wcsstr;
 
   inline wchar_t*
   wcsstr(wchar_t* __s1, wchar_t* __s2)
   { return wcsstr(const_cast<const wchar_t*>(__s1), __s2); }
 
   using ::wmemchr;
 
   inline wchar_t*
   wmemchr(wchar_t* __p, wchar_t __c, size_t __n)
   { return wmemchr(const_cast<const wchar_t*>(__p), __c, __n); }
 }
 
 
 
 
 
 
 
 namespace __gnu_cxx
 {
   using ::wcstold;
   using ::wcstoll;
   using ::wcstoull;
 }
 
 namespace std
 {
   using __gnu_cxx::wcstold;
   using __gnu_cxx::wcstoll;
   using __gnu_cxx::wcstoull;
 }
 # 46 "/usr/include/c++/3.2/bits/fpos.h" 2 3
 
 namespace std
 {
 
 
 
   template<typename _StateT>
     class fpos
     {
     public:
 
       typedef _StateT __state_type;
 
     private:
       streamoff _M_off;
       __state_type _M_st;
 
     public:
       __state_type
       state() const { return _M_st; }
 
       void
       state(__state_type __st) { _M_st = __st; }
 
 
 
       fpos(): _M_off(streamoff()), _M_st(__state_type()) { }
 
       fpos(streamoff __off, __state_type __st = __state_type())
       : _M_off(__off), _M_st(__st) { }
 
       operator streamoff() const { return _M_off; }
 
       fpos&
       operator+=(streamoff __off) { _M_off += __off; return *this; }
 
       fpos&
       operator-=(streamoff __off) { _M_off -= __off; return *this; }
 
       fpos
       operator+(streamoff __off)
       {
         fpos __t(*this);
         __t += __off;
         return __t;
       }
 
       fpos
       operator-(streamoff __off)
       {
         fpos __t(*this);
         __t -= __off;
         return __t;
       }
 
       bool
       operator==(const fpos& __pos) const
       { return _M_off == __pos._M_off; }
 
       bool
       operator!=(const fpos& __pos) const
       { return _M_off != __pos._M_off; }
 
       streamoff
       _M_position() const { return _M_off; }
 
       void
       _M_position(streamoff __off) { _M_off = __off; }
     };
 
 
   typedef fpos<mbstate_t> streampos;
 
   typedef fpos<mbstate_t> wstreampos;
 
 }
 # 47 "/usr/include/c++/3.2/bits/char_traits.h" 2 3
 
 namespace std
 {
 
 
 
   template<class _CharT>
     struct char_traits
     {
       typedef _CharT char_type;
 
       typedef unsigned long int_type;
       typedef streampos pos_type;
       typedef streamoff off_type;
       typedef mbstate_t state_type;
 
       static void
       assign(char_type& __c1, const char_type& __c2);
 
       static bool
       eq(const char_type& __c1, const char_type& __c2);
 
       static bool
       lt(const char_type& __c1, const char_type& __c2);
 
       static int
       compare(const char_type* __s1, const char_type* __s2, size_t __n);
 
       static size_t
       length(const char_type* __s);
 
       static const char_type*
       find(const char_type* __s, size_t __n, const char_type& __a);
 
       static char_type*
       move(char_type* __s1, const char_type* __s2, size_t __n);
 
       static char_type*
       copy(char_type* __s1, const char_type* __s2, size_t __n);
 
       static char_type*
       assign(char_type* __s, size_t __n, char_type __a);
 
       static char_type
       to_char_type(const int_type& __c);
 
       static int_type
       to_int_type(const char_type& __c);
 
       static bool
       eq_int_type(const int_type& __c1, const int_type& __c2);
 
       static int_type
       eof();
 
       static int_type
       not_eof(const int_type& __c);
     };
 
 
 
   template<>
     struct char_traits<char>
     {
       typedef char char_type;
       typedef int int_type;
       typedef streampos pos_type;
       typedef streamoff off_type;
       typedef mbstate_t state_type;
 
       static void
       assign(char_type& __c1, const char_type& __c2)
       { __c1 = __c2; }
 
       static bool
       eq(const char_type& __c1, const char_type& __c2)
       { return __c1 == __c2; }
 
       static bool
       lt(const char_type& __c1, const char_type& __c2)
       { return __c1 < __c2; }
 
       static int
       compare(const char_type* __s1, const char_type* __s2, size_t __n)
       { return memcmp(__s1, __s2, __n); }
 
       static size_t
       length(const char_type* __s)
       { return strlen(__s); }
 
       static const char_type*
       find(const char_type* __s, size_t __n, const char_type& __a)
       { return static_cast<const char_type*>(memchr(__s, __a, __n)); }
 
       static char_type*
       move(char_type* __s1, const char_type* __s2, size_t __n)
       { return static_cast<char_type*>(memmove(__s1, __s2, __n)); }
 
       static char_type*
       copy(char_type* __s1, const char_type* __s2, size_t __n)
       { return static_cast<char_type*>(memcpy(__s1, __s2, __n)); }
 
       static char_type*
       assign(char_type* __s, size_t __n, char_type __a)
       { return static_cast<char_type*>(memset(__s, __a, __n)); }
 
       static char_type
       to_char_type(const int_type& __c)
       { return static_cast<char_type>(__c); }
 
 
 
       static int_type
       to_int_type(const char_type& __c)
       { return static_cast<int_type>(static_cast<unsigned char>(__c)); }
 
       static bool
       eq_int_type(const int_type& __c1, const int_type& __c2)
       { return __c1 == __c2; }
 
       static int_type
       eof() { return static_cast<int_type>((-1)); }
 
       static int_type
       not_eof(const int_type& __c)
       { return (__c == eof()) ? 0 : __c; }
   };
 
 
 
   template<>
     struct char_traits<wchar_t>
     {
       typedef wchar_t char_type;
       typedef wint_t int_type;
       typedef streamoff off_type;
       typedef wstreampos pos_type;
       typedef mbstate_t state_type;
 
       static void
       assign(char_type& __c1, const char_type& __c2)
       { __c1 = __c2; }
 
       static bool
       eq(const char_type& __c1, const char_type& __c2)
       { return __c1 == __c2; }
 
       static bool
       lt(const char_type& __c1, const char_type& __c2)
       { return __c1 < __c2; }
 
       static int
       compare(const char_type* __s1, const char_type* __s2, size_t __n)
       { return wmemcmp(__s1, __s2, __n); }
 
       static size_t
       length(const char_type* __s)
       { return wcslen(__s); }
 
       static const char_type*
       find(const char_type* __s, size_t __n, const char_type& __a)
       { return wmemchr(__s, __a, __n); }
 
       static char_type*
       move(char_type* __s1, const char_type* __s2, int_type __n)
       { return wmemmove(__s1, __s2, __n); }
 
       static char_type*
       copy(char_type* __s1, const char_type* __s2, size_t __n)
       { return wmemcpy(__s1, __s2, __n); }
 
       static char_type*
       assign(char_type* __s, size_t __n, char_type __a)
       { return wmemset(__s, __a, __n); }
 
       static char_type
       to_char_type(const int_type& __c) { return char_type(__c); }
 
       static int_type
       to_int_type(const char_type& __c) { return int_type(__c); }
 
       static bool
       eq_int_type(const int_type& __c1, const int_type& __c2)
       { return __c1 == __c2; }
 
       static int_type
       eof() { return static_cast<int_type>((0xffffffffu)); }
 
       static int_type
       not_eof(const int_type& __c)
       { return eq_int_type(__c, eof()) ? 0 : __c; }
   };
 
 
   template<typename _CharT, typename _Traits>
     struct _Char_traits_match
     {
       _CharT _M_c;
       _Char_traits_match(_CharT const& __c) : _M_c(__c) { }
 
       bool
       operator()(_CharT const& __a) { return _Traits::eq(_M_c, __a); }
     };
 }
 # 48 "/usr/include/c++/3.2/string" 2 3
 # 1 "/usr/include/c++/3.2/memory" 1 3
 # 53 "/usr/include/c++/3.2/memory" 3
 
 # 1 "/usr/include/c++/3.2/bits/stl_algobase.h" 1 3
 # 66 "/usr/include/c++/3.2/bits/stl_algobase.h" 3
 # 1 "/usr/include/c++/3.2/climits" 1 3
 # 48 "/usr/include/c++/3.2/climits" 3
 
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/limits.h" 1 3
 # 11 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/limits.h" 3
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/syslimits.h" 1 3
 
 
 
 
 
 
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/limits.h" 1 3
 # 132 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/limits.h" 3
 # 1 "/usr/include/limits.h" 1 3
 # 144 "/usr/include/limits.h" 3
 # 1 "/usr/include/bits/posix1_lim.h" 1 3
 # 126 "/usr/include/bits/posix1_lim.h" 3
 # 1 "/usr/include/bits/local_lim.h" 1 3
 # 36 "/usr/include/bits/local_lim.h" 3
 # 1 "/usr/include/linux/limits.h" 1 3
 # 37 "/usr/include/bits/local_lim.h" 2 3
 # 127 "/usr/include/bits/posix1_lim.h" 2 3
 # 145 "/usr/include/limits.h" 2 3
 
 
 
 # 1 "/usr/include/bits/posix2_lim.h" 1 3
 # 149 "/usr/include/limits.h" 2 3
 
 
 
 # 1 "/usr/include/bits/xopen_lim.h" 1 3
 # 34 "/usr/include/bits/xopen_lim.h" 3
 # 1 "/usr/include/bits/stdio_lim.h" 1 3
 # 35 "/usr/include/bits/xopen_lim.h" 2 3
 # 136 "/usr/include/bits/xopen_lim.h" 3
 # 1 "/usr/include/bits/wordsize.h" 1 3
 # 137 "/usr/include/bits/xopen_lim.h" 2 3
 # 153 "/usr/include/limits.h" 2 3
 # 133 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/limits.h" 2 3
 # 8 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/syslimits.h" 2 3
 # 12 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/limits.h" 2 3
 # 50 "/usr/include/c++/3.2/climits" 2 3
 # 67 "/usr/include/c++/3.2/bits/stl_algobase.h" 2 3
 # 1 "/usr/include/c++/3.2/cstdlib" 1 3
 # 48 "/usr/include/c++/3.2/cstdlib" 3
 
 
 
 
 # 1 "/usr/include/stdlib.h" 1 3
 # 33 "/usr/include/stdlib.h" 3
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stddef.h" 1 3
 # 34 "/usr/include/stdlib.h" 2 3
 
 extern "C" {
 
 
 
 
 
 
 # 1 "/usr/include/bits/waitflags.h" 1 3
 # 43 "/usr/include/stdlib.h" 2 3
 # 1 "/usr/include/bits/waitstatus.h" 1 3
 # 63 "/usr/include/bits/waitstatus.h" 3
 # 1 "/usr/include/endian.h" 1 3
 # 37 "/usr/include/endian.h" 3
 # 1 "/usr/include/bits/endian.h" 1 3
 # 38 "/usr/include/endian.h" 2 3
 # 64 "/usr/include/bits/waitstatus.h" 2 3
 
 union wait
   {
     int w_status;
     struct
       {
 
         unsigned int __w_termsig:7;
         unsigned int __w_coredump:1;
         unsigned int __w_retcode:8;
         unsigned int:16;
 
 
 
 
 
 
 
       } __wait_terminated;
     struct
       {
 
         unsigned int __w_stopval:8;
         unsigned int __w_stopsig:8;
         unsigned int:16;
 
 
 
 
 
 
       } __wait_stopped;
   };
 # 44 "/usr/include/stdlib.h" 2 3
 # 94 "/usr/include/stdlib.h" 3
 typedef struct
   {
     int quot;
     int rem;
   } div_t;
 
 
 
 typedef struct
   {
     long int quot;
     long int rem;
   } ldiv_t;
 
 
 
 
 
 __extension__ typedef struct
   {
     long long int quot;
     long long int rem;
   } lldiv_t;
 # 133 "/usr/include/stdlib.h" 3
 extern size_t __ctype_get_mb_cur_max (void) throw ();
 
 
 
 extern double atof (__const char *__nptr) throw () __attribute__ ((__pure__));
 
 extern int atoi (__const char *__nptr) throw () __attribute__ ((__pure__));
 
 extern long int atol (__const char *__nptr) throw () __attribute__ ((__pure__));
 
 
 
 __extension__ extern long long int atoll (__const char *__nptr)
      throw () __attribute__ ((__pure__));
 
 
 
 extern double strtod (__const char *__restrict __nptr,
                       char **__restrict __endptr) throw ();
 
 
 
 extern float strtof (__const char *__restrict __nptr,
                      char **__restrict __endptr) throw ();
 
 extern long double strtold (__const char *__restrict __nptr,
                             char **__restrict __endptr) throw ();
 
 
 
 extern long int strtol (__const char *__restrict __nptr,
                         char **__restrict __endptr, int __base) throw ();
 
 extern unsigned long int strtoul (__const char *__restrict __nptr,
                                   char **__restrict __endptr, int __base)
      throw ();
 
 
 
 __extension__
 extern long long int strtoq (__const char *__restrict __nptr,
                              char **__restrict __endptr, int __base) throw ();
 
 __extension__
 extern unsigned long long int strtouq (__const char *__restrict __nptr,
                                        char **__restrict __endptr, int __base)
      throw ();
 
 
 
 
 
 
 __extension__
 extern long long int strtoll (__const char *__restrict __nptr,
                               char **__restrict __endptr, int __base) throw ();
 
 __extension__
 extern unsigned long long int strtoull (__const char *__restrict __nptr,
                                         char **__restrict __endptr, int __base)
      throw ();
 # 215 "/usr/include/stdlib.h" 3
 extern long int __strtol_l (__const char *__restrict __nptr,
                             char **__restrict __endptr, int __base,
                             __locale_t __loc) throw ();
 
 extern unsigned long int __strtoul_l (__const char *__restrict __nptr,
                                       char **__restrict __endptr,
                                       int __base, __locale_t __loc) throw ();
 
 __extension__
 extern long long int __strtoll_l (__const char *__restrict __nptr,
                                   char **__restrict __endptr, int __base,
                                   __locale_t __loc) throw ();
 
 __extension__
 extern unsigned long long int __strtoull_l (__const char *__restrict __nptr,
                                             char **__restrict __endptr,
                                             int __base, __locale_t __loc)
      throw ();
 
 extern double __strtod_l (__const char *__restrict __nptr,
                           char **__restrict __endptr, __locale_t __loc)
      throw ();
 
 extern float __strtof_l (__const char *__restrict __nptr,
                          char **__restrict __endptr, __locale_t __loc) throw ();
 
 extern long double __strtold_l (__const char *__restrict __nptr,
                                 char **__restrict __endptr,
                                 __locale_t __loc) throw ();
 
 
 
 
 
 
 extern double __strtod_internal (__const char *__restrict __nptr,
                                  char **__restrict __endptr, int __group)
      throw ();
 extern float __strtof_internal (__const char *__restrict __nptr,
                                 char **__restrict __endptr, int __group)
      throw ();
 extern long double __strtold_internal (__const char *__restrict __nptr,
                                        char **__restrict __endptr,
                                        int __group) throw ();
 
 extern long int __strtol_internal (__const char *__restrict __nptr,
                                    char **__restrict __endptr,
                                    int __base, int __group) throw ();
 
 
 
 extern unsigned long int __strtoul_internal (__const char *__restrict __nptr,
                                              char **__restrict __endptr,
                                              int __base, int __group) throw ();
 
 
 
 
 __extension__
 extern long long int __strtoll_internal (__const char *__restrict __nptr,
                                          char **__restrict __endptr,
                                          int __base, int __group) throw ();
 
 
 
 __extension__
 extern unsigned long long int __strtoull_internal (__const char *
                                                    __restrict __nptr,
                                                    char **__restrict __endptr,
                                                    int __base, int __group)
      throw ();
 # 384 "/usr/include/stdlib.h" 3
 extern char *l64a (long int __n) throw ();
 
 
 extern long int a64l (__const char *__s) throw () __attribute__ ((__pure__));
 
 
 # 1 "/usr/include/sys/types.h" 1 3
 # 28 "/usr/include/sys/types.h" 3
 extern "C" {
 
 
 
 
 
 typedef __u_char u_char;
 typedef __u_short u_short;
 typedef __u_int u_int;
 typedef __u_long u_long;
 typedef __quad_t quad_t;
 typedef __u_quad_t u_quad_t;
 typedef __fsid_t fsid_t;
 
 
 
 
 typedef __loff_t loff_t;
 
 
 
 typedef __ino_t ino_t;
 
 
 
 
 
 
 typedef __ino64_t ino64_t;
 
 
 
 
 typedef __dev_t dev_t;
 
 
 
 
 typedef __gid_t gid_t;
 
 
 
 
 typedef __mode_t mode_t;
 
 
 
 
 typedef __nlink_t nlink_t;
 
 
 
 
 typedef __uid_t uid_t;
 
 
 
 
 
 typedef __off_t off_t;
 
 
 
 
 
 
 typedef __off64_t off64_t;
 # 104 "/usr/include/sys/types.h" 3
 typedef __id_t id_t;
 
 
 
 
 typedef __ssize_t ssize_t;
 
 
 
 
 
 typedef __daddr_t daddr_t;
 typedef __caddr_t caddr_t;
 
 
 
 
 
 typedef __key_t key_t;
 # 136 "/usr/include/sys/types.h" 3
 typedef __useconds_t useconds_t;
 
 
 
 typedef __suseconds_t suseconds_t;
 
 
 
 
 
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stddef.h" 1 3
 # 147 "/usr/include/sys/types.h" 2 3
 
 
 
 typedef unsigned long int ulong;
 typedef unsigned short int ushort;
 typedef unsigned int uint;
 # 190 "/usr/include/sys/types.h" 3
 typedef int int8_t __attribute__ ((__mode__ (__QI__)));
 typedef int int16_t __attribute__ ((__mode__ (__HI__)));
 typedef int int32_t __attribute__ ((__mode__ (__SI__)));
 typedef int int64_t __attribute__ ((__mode__ (__DI__)));
 
 
 typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
 typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
 typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
 typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));
 
 typedef int register_t __attribute__ ((__mode__ (__word__)));
 # 215 "/usr/include/sys/types.h" 3
 # 1 "/usr/include/sys/select.h" 1 3
 # 31 "/usr/include/sys/select.h" 3
 # 1 "/usr/include/bits/select.h" 1 3
 # 32 "/usr/include/sys/select.h" 2 3
 
 
 # 1 "/usr/include/bits/sigset.h" 1 3
 # 35 "/usr/include/sys/select.h" 2 3
 # 46 "/usr/include/sys/select.h" 3
 # 1 "/usr/include/bits/time.h" 1 3
 # 67 "/usr/include/bits/time.h" 3
 struct timeval
   {
     __time_t tv_sec;
     __suseconds_t tv_usec;
   };
 # 47 "/usr/include/sys/select.h" 2 3
 # 55 "/usr/include/sys/select.h" 3
 typedef long int __fd_mask;
 
 
 
 
 
 
 
 typedef struct
   {
 
 
 
     __fd_mask fds_bits[1024 / (8 * sizeof (__fd_mask))];
 
 
 
 
 
   } fd_set;
 
 
 
 
 
 
 typedef __fd_mask fd_mask;
 # 95 "/usr/include/sys/select.h" 3
 extern "C" {
 
 
 
 
 
 
 extern int select (int __nfds, fd_set *__restrict __readfds,
                    fd_set *__restrict __writefds,
                    fd_set *__restrict __exceptfds,
                    struct timeval *__restrict __timeout) throw ();
 
 
 
 
 
 extern int pselect (int __nfds, fd_set *__restrict __readfds,
                     fd_set *__restrict __writefds,
                     fd_set *__restrict __exceptfds,
                     const struct timespec *__restrict __timeout,
                     const __sigset_t *__restrict __sigmask) throw ();
 
 
 }
 # 216 "/usr/include/sys/types.h" 2 3
 
 
 # 1 "/usr/include/sys/sysmacros.h" 1 3
 # 219 "/usr/include/sys/types.h" 2 3
 
 
 
 
 typedef __blksize_t blksize_t;
 
 
 
 
 
 
 typedef __blkcnt_t blkcnt_t;
 
 
 
 typedef __fsblkcnt_t fsblkcnt_t;
 
 
 
 typedef __fsfilcnt_t fsfilcnt_t;
 # 257 "/usr/include/sys/types.h" 3
 typedef __blkcnt64_t blkcnt64_t;
 typedef __fsblkcnt64_t fsblkcnt64_t;
 typedef __fsfilcnt64_t fsfilcnt64_t;
 
 
 }
 # 391 "/usr/include/stdlib.h" 2 3
 
 
 
 
 
 
 extern long int random (void) throw ();
 
 
 extern void srandom (unsigned int __seed) throw ();
 
 
 
 
 
 extern char *initstate (unsigned int __seed, char *__statebuf,
                         size_t __statelen) throw ();
 
 
 
 extern char *setstate (char *__statebuf) throw ();
 
 
 
 
 
 
 
 struct random_data
   {
     int32_t *fptr;
     int32_t *rptr;
     int32_t *state;
     int rand_type;
     int rand_deg;
     int rand_sep;
     int32_t *end_ptr;
   };
 
 extern int random_r (struct random_data *__restrict __buf,
                      int32_t *__restrict __result) throw ();
 
 extern int srandom_r (unsigned int __seed, struct random_data *__buf) throw ();
 
 extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
                         size_t __statelen,
                         struct random_data *__restrict __buf) throw ();
 
 extern int setstate_r (char *__restrict __statebuf,
                        struct random_data *__restrict __buf) throw ();
 
 
 
 
 
 extern int rand (void) throw ();
 
 extern void srand (unsigned int __seed) throw ();
 
 
 
 extern int rand_r (unsigned int *__seed) throw ();
 
 
 
 
 
 
 
 extern double drand48 (void) throw ();
 extern double erand48 (unsigned short int __xsubi[3]) throw ();
 
 
 extern long int lrand48 (void) throw ();
 extern long int nrand48 (unsigned short int __xsubi[3]) throw ();
 
 
 extern long int mrand48 (void) throw ();
 extern long int jrand48 (unsigned short int __xsubi[3]) throw ();
 
 
 extern void srand48 (long int __seedval) throw ();
 extern unsigned short int *seed48 (unsigned short int __seed16v[3]) throw ();
 extern void lcong48 (unsigned short int __param[7]) throw ();
 
 
 
 
 
 struct drand48_data
   {
     unsigned short int __x[3];
     unsigned short int __old_x[3];
     unsigned short int __c;
     unsigned short int __init;
     unsigned long long int __a;
   };
 
 
 extern int drand48_r (struct drand48_data *__restrict __buffer,
                       double *__restrict __result) throw ();
 extern int erand48_r (unsigned short int __xsubi[3],
                       struct drand48_data *__restrict __buffer,
                       double *__restrict __result) throw ();
 
 
 extern int lrand48_r (struct drand48_data *__restrict __buffer,
                       long int *__restrict __result) throw ();
 extern int nrand48_r (unsigned short int __xsubi[3],
                       struct drand48_data *__restrict __buffer,
                       long int *__restrict __result) throw ();
 
 
 extern int mrand48_r (struct drand48_data *__restrict __buffer,
                       long int *__restrict __result) throw ();
 extern int jrand48_r (unsigned short int __xsubi[3],
                       struct drand48_data *__restrict __buffer,
                       long int *__restrict __result) throw ();
 
 
 extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
      throw ();
 
 extern int seed48_r (unsigned short int __seed16v[3],
                      struct drand48_data *__buffer) throw ();
 
 extern int lcong48_r (unsigned short int __param[7],
                       struct drand48_data *__buffer) throw ();
 # 527 "/usr/include/stdlib.h" 3
 extern void *malloc (size_t __size) throw () __attribute__ ((__malloc__));
 
 extern void *calloc (size_t __nmemb, size_t __size)
      throw () __attribute__ ((__malloc__));
 
 
 
 
 
 extern void *realloc (void *__ptr, size_t __size) throw () __attribute__ ((__malloc__));
 
 extern void free (void *__ptr) throw ();
 
 
 
 extern void cfree (void *__ptr) throw ();
 
 
 
 # 1 "/usr/include/alloca.h" 1 3
 # 25 "/usr/include/alloca.h" 3
 # 1 "/usr/lib/gcc-lib/i386-linux/3.2.1/include/stddef.h" 1 3
 # 26 "/usr/include/alloca.h" 2 3
 
 extern "C" {
 
 
 
 
 
 extern void *alloca (size_t __size) throw ();
 
 
 
 
 
 }
 # 547 "/usr/include/stdlib.h" 2 3
 
 
 
 
 extern void *valloc (size_t __size) throw () __attribute__ ((__malloc__));
 
 
 
 
 extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
      throw () __attribute__ ((__malloc__));
 
 
 
 extern void abort (void) throw () __attribute__ ((__noreturn__));
 
 
 
 extern int atexit (void (*__func) (void)) throw ();
 
 
 
 
 extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
      throw ();
 
 
 
 
 
 extern void exit (int __status) throw () __attribute__ ((__noreturn__));
 
 
 
 
 extern void _Exit (int __status) throw () __attribute__ ((__noreturn__));
 
 
 
 
 extern char *getenv (__const char *__name) throw ();
 
 
 
 extern char *__secure_getenv (__const char *__name) throw ();
 
 
 
 
 
 extern int putenv (char *__string) throw ();
 
 
 
 
 
 extern int setenv (__const char *__name, __const char *__value, int __replace)
      throw ();
 
 
 extern int unsetenv (__const char *__name) throw ();
 
 
 
 
 
 
 extern int clearenv (void) throw ();
 # 623 "/usr/include/stdlib.h" 3
 extern char *mktemp (char *__template) throw ();
 
 
 
 
 
 
 
 extern int mkstemp (char *__template) throw ();
 # 640 "/usr/include/stdlib.h" 3
 extern int mkstemp64 (char *__template) throw ();
 # 650 "/usr/include/stdlib.h" 3
 extern char *mkdtemp (char *__template) throw ();
 
 
 
 
 extern int system (__const char *__command) throw ();
 
 
 
 
 
 
 extern char *canonicalize_file_name (__const char *__name) throw ();
 # 672 "/usr/include/stdlib.h" 3
 extern char *realpath (__const char *__restrict __name,
                        char *__restrict __resolved) throw ();
 
 
 
 
 
 
 typedef int (*__compar_fn_t) (__const void *, __const void *);
 
 
 typedef __compar_fn_t comparison_fn_t;
 
 
 
 
 
 extern void *bsearch (__const void *__key, __const void *__base,
                       size_t __nmemb, size_t __size, __compar_fn_t __compar);
 
 
 
 extern void qsort (void *__base, size_t __nmemb, size_t __size,
                    __compar_fn_t __compar);
 
 
 
 extern int abs (int __x) throw () __attribute__ ((__const__));
 extern long int labs (long int __x) throw () __attribute__ ((__const__));
 
 __extension__ extern long long int llabs (long long int __x)
      throw () __attribute__ ((__const__));
 
 
 
 
 
 
 extern div_t div (int __numer, int __denom)
      throw () __attribute__ ((__const__));
 extern ldiv_t ldiv (long int __numer, long int __denom)
      throw () __attribute__ ((__const__));
 
 __extension__ extern lldiv_t lldiv (long long int __numer,
                                     long long int __denom)
      throw () __attribute__ ((__const__));
 # 728 "/usr/include/stdlib.h" 3
 extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
                    int *__restrict __sign) throw ();
 
 
 
 
 extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
                    int *__restrict __sign) throw ();
 
 
 
 
 extern char *gcvt (double __value, int __ndigit, char *__buf) throw ();
 
 
 
 
 extern char *qecvt (long double __value, int __ndigit,
                     int *__restrict __decpt, int *__restrict __sign) throw ();
 extern char *qfcvt (long double __value, int __ndigit,
                     int *__restrict __decpt, int *__restrict __sign) throw ();
 extern char *qgcvt (long double __value, int __ndigit, char *__buf) throw ();
 
 
 
 
 extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
                    int *__restrict __sign, char *__restrict __buf,
                    size_t __len) throw ();
 extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
                    int *__restrict __sign, char *__restrict __buf,
                    size_t __len) throw ();
 
 extern int qecvt_r (long double __value, int __ndigit,
                     int *__restrict __decpt, int *__restrict __sign,
                     char *__restrict __buf, size_t __len) throw ();
 extern int qfcvt_r (long double __value, int __ndigit,
                     int *__restrict __decpt, int *__restrict __sign,
                     char *__restrict __buf, size_t __len) throw ();
 
 
 
 
 
 
 extern int mblen (__const char *__s, size_t __n) throw ();
 
 
 extern int mbtowc (wchar_t *__restrict __pwc,
                    __const char *__restrict __s, size_t __n) throw ();
 
 
 extern int wctomb (char *__s, wchar_t __wchar) throw ();
 
 
 
 extern size_t mbstowcs (wchar_t *__restrict __pwcs,
                         __const char *__restrict __s, size_t __n) throw ();
 
 extern size_t wcstombs (char *__restrict __s,
                         __const wchar_t *__restrict __pwcs, size_t __n)
      throw ();
 
 
 
 
 
 
 
 extern int rpmatch (__const char *__response) throw ();
 # 808 "/usr/include/stdlib.h" 3
 extern int getsubopt (char **__restrict __optionp,
                       char *__const *__restrict __tokens,
                       char **__restrict __valuep) throw ();
 
 
 
 
 
 extern void setkey (__const char *__key) throw ();
 
 
 
 
 
 
 
 extern int posix_openpt (int __oflag) throw ();
 
 
 
 
 
 
 
 extern int grantpt (int __fd) throw ();
 
 
 
 extern int unlockpt (int __fd) throw ();
 
 
 
 
 extern char *ptsname (int __fd) throw ();
 
 
 
 
 
 
 extern int ptsname_r (int __fd, char *__buf, size_t __buflen) throw ();
 
 
 extern int getpt (void) throw ();
 
 
 
 
 
 
 extern int getloadavg (double __loadavg[], int __nelem) throw ();
 
 
 
 
 
 }
 # 53 "/usr/include/c++/3.2/cstdlib" 2 3
 # 84 "/usr/include/c++/3.2/cstdlib" 3
 namespace std
 {
   using ::div_t;
   using ::ldiv_t;
 
   using ::abort;
   using ::abs;
   using ::atexit;
   using ::atof;
   using ::atoi;
   using ::atol;
   using ::bsearch;
   using ::calloc;
   using ::div;
   using ::exit;
   using ::free;
   using ::getenv;
   using ::labs;
   using ::ldiv;
   using ::malloc;
   using ::mblen;
   using ::mbstowcs;
   using ::mbtowc;
   using ::qsort;
   using ::rand;
   using ::realloc;
   using ::srand;
   using ::strtod;
   using ::strtol;
   using ::strtoul;
   using ::system;
   using ::wcstombs;
   using ::wctomb;
 
   inline long
   abs(long __i) { return labs(__i); }
 
   inline ldiv_t
   div(long __i, long __j) { return ldiv(__i, __j); }
 }
 # 136 "/usr/include/c++/3.2/cstdlib" 3
 namespace __gnu_cxx
 {
   using ::lldiv_t;
   using ::_Exit;
 
   inline long long
   abs(long long __x) { return __x >= 0 ? __x : -__x; }
 
   inline long long
   llabs(long long __x) { return __x >= 0 ? __x : -__x; }
 
   inline lldiv_t
   div(long long __n, long long __d)
   { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }
 
   inline lldiv_t
   lldiv(long long __n, long long __d)
   { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }
 
   using ::atoll;
   using ::strtof;
   using ::strtoll;
   using ::strtoull;
   using ::strtold;
 }
 
 namespace std
 {
   using __gnu_cxx::lldiv_t;
   using __gnu_cxx::_Exit;
   using __gnu_cxx::abs;
   using __gnu_cxx::llabs;
   using __gnu_cxx::div;
   using __gnu_cxx::lldiv;
   using __gnu_cxx::atoll;
   using __gnu_cxx::strtof;
   using __gnu_cxx::strtoll;
   using __gnu_cxx::strtoull;
   using __gnu_cxx::strtold;
 }
 # 68 "/usr/include/c++/3.2/bits/stl_algobase.h" 2 3
 
 # 1 "/usr/include/c++/3.2/new" 1 3
 # 42 "/usr/include/c++/3.2/new" 3
 # 1 "/usr/include/c++/3.2/exception" 1 3
 # 40 "/usr/include/c++/3.2/exception" 3
 extern "C++" {
 
 namespace std
 {
 
 
 
 
 
 
   class exception
   {
   public:
     exception() throw() { }
     virtual ~exception() throw();
 
 
     virtual const char* what() const throw();
   };
 
 
 
   class bad_exception : public exception
   {
   public:
     bad_exception() throw() { }
 
 
     virtual ~bad_exception() throw();
   };
 
 
   typedef void (*terminate_handler) ();
 
   typedef void (*unexpected_handler) ();
 
 
   terminate_handler set_terminate(terminate_handler) throw();
 
 
   void terminate() __attribute__ ((__noreturn__));
 
 
   unexpected_handler set_unexpected(unexpected_handler) throw();
 
 
   void unexpected() __attribute__ ((__noreturn__));
 # 98 "/usr/include/c++/3.2/exception" 3
   bool uncaught_exception() throw();
 }
 
 namespace __gnu_cxx
 {
 # 111 "/usr/include/c++/3.2/exception" 3
   void __verbose_terminate_handler ();
 }
 
 }
 # 43 "/usr/include/c++/3.2/new" 2 3
 
 extern "C++" {
 
 namespace std
 {
 
 
   class bad_alloc : public exception
   {
   public:
     bad_alloc() throw() { }
 
 
     virtual ~bad_alloc() throw();
   };
 
   struct nothrow_t { };
   extern const nothrow_t nothrow;
 
 
   typedef void (*new_handler)();
 
   new_handler set_new_handler(new_handler) throw();
 }
 # 79 "/usr/include/c++/3.2/new" 3
 void* operator new(std::size_t) throw (std::bad_alloc);
 void* operator new[](std::size_t) throw (std::bad_alloc);
 void operator delete(void*) throw();
 void operator delete[](void*) throw();
 void* operator new(std::size_t, const std::nothrow_t&) throw();
 void* operator new[](std::size_t, const std::nothrow_t&) throw();
 void operator delete(void*, const std::nothrow_t&) throw();
 void operator delete[](void*, const std::nothrow_t&) throw();
 
 
 inline void* operator new(std::size_t, void* __p) throw() { return __p; }
 inline void* operator new[](std::size_t, void* __p) throw() { return __p; }
 
 
 inline void operator delete (void*, void*) throw() { };
 inline void operator delete[](void*, void*) throw() { };
 
 }
 # 70 "/usr/include/c++/3.2/bits/stl_algobase.h" 2 3
 # 1 "/usr/include/c++/3.2/iosfwd" 1 3
 # 43 "/usr/include/c++/3.2/iosfwd" 3
 
 
 
 
 # 1 "/usr/include/c++/3.2/bits/functexcept.h" 1 3
 # 34 "/usr/include/c++/3.2/bits/functexcept.h" 3
 # 1 "/usr/include/c++/3.2/exception_defines.h" 1 3
 # 35 "/usr/include/c++/3.2/bits/functexcept.h" 2 3
 
 namespace std
 {
 
   void
   __throw_bad_exception(void);
 
 
   void
   __throw_bad_alloc(void);
 
 
   void
   __throw_bad_cast(void);
 
   void
   __throw_bad_typeid(void);
 
 
   void
   __throw_logic_error(const char* __s);
 
   void
   __throw_domain_error(const char* __s);
 
   void
   __throw_invalid_argument(const char* __s);
 
   void
   __throw_length_error(const char* __s);
 
   void
   __throw_out_of_range(const char* __s);
 
   void
   __throw_runtime_error(const char* __s);
 
   void
   __throw_range_error(const char* __s);
 
   void
   __throw_overflow_error(const char* __s);
 
   void
   __throw_underflow_error(const char* __s);
 
 
   void
   __throw_ios_failure(const char* __s);
 }
 # 48 "/usr/include/c++/3.2/iosfwd" 2 3
 
 namespace std
 {
   template<typename _CharT, typename _Traits = char_traits<_CharT> >
     class basic_ios;
 
   template<typename _CharT, typename _Traits = char_traits<_CharT> >
     class basic_streambuf;
 
   template<typename _CharT, typename _Traits = char_traits<_CharT> >
     class basic_istream;
 
   template<typename _CharT, typename _Traits = char_traits<_CharT> >
     class basic_ostream;
 
   template<typename _CharT, typename _Traits = char_traits<_CharT> >
     class basic_iostream;
 
   template<typename _CharT, typename _Traits = char_traits<_CharT>,
             typename _Alloc = allocator<_CharT> >
     class basic_stringbuf;
 
   template<typename _CharT, typename _Traits = char_traits<_CharT>,
            typename _Alloc = allocator<_CharT> >
     class basic_istringstream;
 
   template<typename _CharT, typename _Traits = char_traits<_CharT>,
            typename _Alloc = allocator<_CharT> >
     class basic_ostringstream;
 
   template<typename _CharT, typename _Traits = char_traits<_CharT>,
            typename _Alloc = allocator<_CharT> >
     class basic_stringstream;
 
   template<typename _CharT, typename _Traits = char_traits<_CharT> >
     class basic_filebuf;
 
   template<typename _CharT, typename _Traits = char_traits<_CharT> >
     class basic_ifstream;
 
   template<typename _CharT, typename _Traits = char_traits<_CharT> >
     class basic_ofstream;
 
   template<typename _CharT, typename _Traits = char_traits<_CharT> >
     class basic_fstream;
 
   template<typename _CharT, typename _Traits = char_traits<_CharT> >
     class istreambuf_iterator;
 
   template<typename _CharT, typename _Traits = char_traits<_CharT> >
     class ostreambuf_iterator;
 
 
 
   class ios_base;
 
 
   typedef basic_ios<char> ios;
   typedef basic_streambuf<char> streambuf;
   typedef basic_istream<char> istream;
   typedef basic_ostream<char> ostream;
   typedef basic_iostream<char> iostream;
   typedef basic_stringbuf<char> stringbuf;
   typedef basic_istringstream<char> istringstream;
   typedef basic_ostringstream<char> ostringstream;
   typedef basic_stringstream<char> stringstream;
   typedef basic_filebuf<char> filebuf;
   typedef basic_ifstream<char> ifstream;
   typedef basic_ofstream<char> ofstream;
   typedef basic_fstream<char> fstream;
 
   typedef basic_ios<wchar_t> wios;
   typedef basic_streambuf<wchar_t> wstreambuf;
   typedef basic_istream<wchar_t> wistream;
   typedef basic_ostream<wchar_t> wostream;
   typedef basic_iostream<wchar_t> wiostream;
   typedef basic_stringbuf<wchar_t> wstringbuf;
   typedef basic_istringstream<wchar_t> wistringstream;
   typedef basic_ostringstream<wchar_t> wostringstream;
   typedef basic_stringstream<wchar_t> wstringstream;
   typedef basic_filebuf<wchar_t> wfilebuf;
   typedef basic_ifstream<wchar_t> wifstream;
   typedef basic_ofstream<wchar_t> wofstream;
   typedef basic_fstream<wchar_t> wfstream;
 }
 # 71 "/usr/include/c++/3.2/bits/stl_algobase.h" 2 3
 # 1 "/usr/include/c++/3.2/bits/stl_pair.h" 1 3
 # 64 "/usr/include/c++/3.2/bits/stl_pair.h" 3
 namespace std
 {
 
 
 template <class _T1, class _T2>
 struct pair {
   typedef _T1 first_type;
   typedef _T2 second_type;
 
   _T1 first;
   _T2 second;
 
 
 
 
   pair() : first(), second() {}
 
 
 
 
   pair(const _T1& __a, const _T2& __b) : first(__a), second(__b) {}
 
 
   template <class _U1, class _U2>
   pair(const pair<_U1, _U2>& __p) : first(__p.first), second(__p.second) {}
 };
 
 
 template <class _T1, class _T2>
 inline bool operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
 {
   return __x.first == __y.first && __x.second == __y.second;
 }
 
 
 template <class _T1, class _T2>
 inline bool operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
 {
   return __x.first < __y.first ||
          (!(__y.first < __x.first) && __x.second < __y.second);
 }
 
 
 template <class _T1, class _T2>
 inline bool operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
   return !(__x == __y);
 }
 
 
 template <class _T1, class _T2>
 inline bool operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
   return __y < __x;
 }
 
 
 template <class _T1, class _T2>
 inline bool operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
   return !(__y < __x);
 }
 
 
 template <class _T1, class _T2>
 inline bool operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
   return !(__x < __y);
 }
 # 140 "/usr/include/c++/3.2/bits/stl_pair.h" 3
 template <class _T1, class _T2>
 
 
 inline pair<_T1, _T2> make_pair(_T1 __x, _T2 __y)
 
 
 
 {
   return pair<_T1, _T2>(__x, __y);
 }
 
 }
 # 72 "/usr/include/c++/3.2/bits/stl_algobase.h" 2 3
 # 1 "/usr/include/c++/3.2/bits/type_traits.h" 1 3
 # 53 "/usr/include/c++/3.2/bits/type_traits.h" 3
 # 90 "/usr/include/c++/3.2/bits/type_traits.h" 3
 struct __true_type {};
 struct __false_type {};
 
 template <class _Tp>
 struct __type_traits {
    typedef __true_type this_dummy_member_must_be_first;
 # 113 "/usr/include/c++/3.2/bits/type_traits.h" 3
    typedef __false_type has_trivial_default_constructor;
    typedef __false_type has_trivial_copy_constructor;
    typedef __false_type has_trivial_assignment_operator;
    typedef __false_type has_trivial_destructor;
    typedef __false_type is_POD_type;
 };
 
 
 
 
 template<> struct __type_traits<bool> {
    typedef __true_type has_trivial_default_constructor;
    typedef __true_type has_trivial_copy_constructor;
    typedef __true_type has_trivial_assignment_operator;
    typedef __true_type has_trivial_destructor;
    typedef __true_type is_POD_type;
 };
 
 template<> struct __type_traits<char> {
    typedef __true_type has_trivial_default_constructor;
    typedef __true_type has_trivial_copy_constructor;
    typedef __true_type has_trivial_assignment_operator;
    typedef __true_type has_trivial_destructor;
    typedef __true_type is_POD_type;
 };
 
 template<> struct __type_traits<signed char> {
    typedef __true_type has_trivial_default_constructor;
    typedef __true_type has_trivial_copy_constructor;
    typedef __true_type has_trivial_assignment_operator;
    typedef __true_type has_trivial_destructor;
    typedef __true_type is_POD_type;
 };
 
 template<> struct __type_traits<unsigned char> {
    typedef __true_type has_trivial_default_constructor;
    typedef __true_type has_trivial_copy_constructor;
    typedef __true_type has_trivial_assignment_operator;
    typedef __true_type has_trivial_destructor;
    typedef __true_type is_POD_type;
 };
 
 template<> struct __type_traits<wchar_t> {
    typedef __true_type has_trivial_default_constructor;
    typedef __true_type has_trivial_copy_constructor;
    typedef __true_type has_trivial_assignment_operator;
    typedef __true_type has_trivial_destructor;
    typedef __true_type is_POD_type;
 };
 
 template<> struct __type_traits<short> {
    typedef __true_type has_trivial_default_constructor;
    typedef __true_type has_trivial_copy_constructor;
    typedef __true_type has_trivial_assignment_operator;
    typedef __true_type has_trivial_destructor;
    typedef __true_type is_POD_type;
 };
 
 template<> struct __type_traits<unsigned short> {
    typedef __true_type has_trivial_default_constructor;
    typedef __true_type has_trivial_copy_constructor;
    typedef __true_type has_trivial_assignment_operator;
    typedef __true_type has_trivial_destructor;
    typedef __true_type is_POD_type;
 };
 
 template<> struct __type_traits<int> {
    typedef __true_type has_trivial_default_constructor;
    typedef __true_type has_trivial_copy_constructor;
    typedef __true_type has_trivial_assignment_operator;
    typedef __true_type has_trivial_destructor;
    typedef __true_type is_POD_type;
 };
 
 template<> struct __type_traits<unsigned int> {
    typedef __true_type has_trivial_default_constructor;
    typedef __true_type has_trivial_copy_constructor;
    typedef __true_type has_trivial_assignment_operator;
    typedef __true_type has_trivial_destructor;
    typedef __true_type is_POD_type;
 };
 
 template<> struct __type_traits<long> {
    typedef __true_type has_trivial_default_constructor;
    typedef __true_type has_trivial_copy_constructor;
    typedef __true_type has_trivial_assignment_operator;
    typedef __true_type has_trivial_destructor;
    typedef __true_type is_POD_type;
 };
 
 template<> struct __type_traits<unsigned long> {
    typedef __true_type has_trivial_default_constructor;
    typedef __true_type has_trivial_copy_constructor;
    typedef __true_type has_trivial_assignment_operator;
    typedef __true_type has_trivial_destructor;
    typedef __true_type is_POD_type;
 };
 
 template<> struct __type_traits<long long> {
    typedef __true_type has_trivial_default_constructor;
    typedef __true_type has_trivial_copy_constructor;
    typedef __true_type has_trivial_assignment_operator;
    typedef __true_type has_trivial_destructor;
    typedef __true_type is_POD_type;
 };
 
 template<> struct __type_traits<unsigned long long> {
    typedef __true_type has_trivial_default_constructor;
    typedef __true_type has_trivial_copy_constructor;
    typedef __true_type has_trivial_assignment_operator;
    typedef __true_type has_trivial_destructor;
    typedef __true_type is_POD_type;
 };
 
 template<> struct __type_traits<float> {
    typedef __true_type has_trivial_default_constructor;
    typedef __true_type has_trivial_copy_constructor;
    typedef __true_type has_trivial_assignment_operator;
    typedef __true_type has_trivial_destructor;
    typedef __true_type is_POD_type;
 };
 
 template<> struct __type_traits<double> {
    typedef __true_type has_trivial_default_constructor;
    typedef __true_type has_trivial_copy_constructor;
    typedef __true_type has_trivial_assignment_operator;
    typedef __true_type has_trivial_destructor;
    typedef __true_type is_POD_type;
 };
 
 template<> struct __type_traits<long double> {
    typedef __true_type has_trivial_default_constructor;
    typedef __true_type has_trivial_copy_constructor;
    typedef __true_type has_trivial_assignment_operator;
    typedef __true_type has_trivial_destructor;
    typedef __true_type is_POD_type;
 };
 
 template <class _Tp>
 struct __type_traits<_Tp*> {
    typedef __true_type has_trivial_default_constructor;
    typedef __true_type has_trivial_copy_constructor;
    typedef __true_type has_trivial_assignment_operator;
    typedef __true_type has_trivial_destructor;
    typedef __true_type is_POD_type;
 };
 
 
 
 
 
 template <class _Tp> struct _Is_integer {
   typedef __false_type _Integral;
 };
 
 template<> struct _Is_integer<bool> {
   typedef __true_type _Integral;
 };
 
 template<> struct _Is_integer<char> {
   typedef __true_type _Integral;
 };
 
 template<> struct _Is_integer<signed char> {
   typedef __true_type _Integral;
 };
 
 template<> struct _Is_integer<unsigned char> {
   typedef __true_type _Integral;
 };
 
 template<> struct _Is_integer<wchar_t> {
   typedef __true_type _Integral;
 };
 
 template<> struct _Is_integer<short> {
   typedef __true_type _Integral;
 };
 
 template<> struct _Is_integer<unsigned short> {
   typedef __true_type _Integral;
 };
 
 template<> struct _Is_integer<int> {
   typedef __true_type _Integral;
 };
 
 template<> struct _Is_integer<unsigned int> {
   typedef __true_type _Integral;
 };
 
 template<> struct _Is_integer<long> {
   typedef __true_type _Integral;
 };
 
 template<> struct _Is_integer<unsigned long> {
   typedef __true_type _Integral;
 };
 
 template<> struct _Is_integer<long long> {
   typedef __true_type _Integral;
 };
 
 template<> struct _Is_integer<unsigned long long> {
   typedef __true_type _Integral;
 };
 
 template<typename _Tp> struct _Is_normal_iterator {
    typedef __false_type _Normal;
 };
 
 
 namespace __gnu_cxx
 {
   template<typename _Iterator, typename _Container> class __normal_iterator;
 }
 
 template<typename _Iterator, typename _Container>
 struct _Is_normal_iterator< __gnu_cxx::__normal_iterator<_Iterator, _Container> > {
    typedef __true_type _Normal;
 };
 # 73 "/usr/include/c++/3.2/bits/stl_algobase.h" 2 3
 # 1 "/usr/include/c++/3.2/bits/stl_iterator_base_types.h" 1 3
 # 68 "/usr/include/c++/3.2/bits/stl_iterator_base_types.h" 3
 
 namespace std
 {
 # 80 "/usr/include/c++/3.2/bits/stl_iterator_base_types.h" 3
   struct input_iterator_tag {};
 
   struct output_iterator_tag {};
 
   struct forward_iterator_tag : public input_iterator_tag {};
 
   struct bidirectional_iterator_tag : public forward_iterator_tag {};
 
   struct random_access_iterator_tag : public bidirectional_iterator_tag {};
 # 100 "/usr/include/c++/3.2/bits/stl_iterator_base_types.h" 3
   template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t,
            typename _Pointer = _Tp*, typename _Reference = _Tp&>
     struct iterator {
 
       typedef _Category iterator_category;
 
       typedef _Tp value_type;
 
       typedef _Distance difference_type;
 
       typedef _Pointer pointer;
 
       typedef _Reference reference;
     };
 
 
 
 
 
 
 
   template<typename _Iterator>
     struct iterator_traits {
       typedef typename _Iterator::iterator_category iterator_category;
       typedef typename _Iterator::value_type value_type;
       typedef typename _Iterator::difference_type difference_type;
       typedef typename _Iterator::pointer pointer;
       typedef typename _Iterator::reference reference;
     };
 
   template<typename _Tp>
     struct iterator_traits<_Tp*> {
       typedef random_access_iterator_tag iterator_category;
       typedef _Tp value_type;
       typedef ptrdiff_t difference_type;
       typedef _Tp* pointer;
       typedef _Tp& reference;
     };
 
   template<typename _Tp>
     struct iterator_traits<const _Tp*> {
       typedef random_access_iterator_tag iterator_category;
       typedef _Tp value_type;
       typedef ptrdiff_t difference_type;
       typedef const _Tp* pointer;
       typedef const _Tp& reference;
     };
 
 
 
 
 
 
 
   template<typename _Iter>
     inline typename iterator_traits<_Iter>::iterator_category
     __iterator_category(const _Iter&)
     { return typename iterator_traits<_Iter>::iterator_category(); }
 
 }
 # 74 "/usr/include/c++/3.2/bits/stl_algobase.h" 2 3
 # 1 "/usr/include/c++/3.2/bits/stl_iterator_base_funcs.h" 1 3
 # 68 "/usr/include/c++/3.2/bits/stl_iterator_base_funcs.h" 3
 # 1 "/usr/include/c++/3.2/bits/concept_check.h" 1 3
 # 39 "/usr/include/c++/3.2/bits/concept_check.h" 3
 # 69 "/usr/include/c++/3.2/bits/stl_iterator_base_funcs.h" 2 3
 
 
 
 
 namespace std
 {
 template<typename _InputIterator>
   inline typename iterator_traits<_InputIterator>::difference_type
   __distance(_InputIterator __first, _InputIterator __last, input_iterator_tag)
   {
 
    
 
     typename iterator_traits<_InputIterator>::difference_type __n = 0;
     while (__first != __last) {
       ++__first; ++__n;
     }
     return __n;
   }
 
 template<typename _RandomAccessIterator>
   inline typename iterator_traits<_RandomAccessIterator>::difference_type
   __distance(_RandomAccessIterator __first, _RandomAccessIterator __last,
              random_access_iterator_tag)
   {
 
    
     return __last - __first;
   }
 # 111 "/usr/include/c++/3.2/bits/stl_iterator_base_funcs.h" 3
 template<typename _InputIterator>
   inline typename iterator_traits<_InputIterator>::difference_type
   distance(_InputIterator __first, _InputIterator __last)
   {
 
     return __distance(__first, __last, __iterator_category(__first));
   }
 
 template<typename _InputIter, typename _Distance>
   inline void
   __advance(_InputIter& __i, _Distance __n, input_iterator_tag)
   {
 
    
     while (__n--) ++__i;
   }
 
 template<typename _BidirectionalIterator, typename _Distance>
   inline void
   __advance(_BidirectionalIterator& __i, _Distance __n,
             bidirectional_iterator_tag)
   {
 
    
 
     if (__n > 0)
       while (__n--) ++__i;
     else
       while (__n++) --__i;
   }
 
 template<typename _RandomAccessIterator, typename _Distance>
   inline void
   __advance(_RandomAccessIterator& __i, _Distance __n,
             random_access_iterator_tag)
   {
 
    
     __i += __n;
   }
 # 164 "/usr/include/c++/3.2/bits/stl_iterator_base_funcs.h" 3
 template<typename _InputIterator, typename _Distance>
   inline void
   advance(_InputIterator& __i, _Distance __n)
   {
 
     __advance(__i, __n, __iterator_category(__i));
   }
 
 }
 # 75 "/usr/include/c++/3.2/bits/stl_algobase.h" 2 3
 # 1 "/usr/include/c++/3.2/bits/stl_iterator.h" 1 3
 # 68 "/usr/include/c++/3.2/bits/stl_iterator.h" 3
 namespace std
 {
 # 89 "/usr/include/c++/3.2/bits/stl_iterator.h" 3
   template<typename _Iterator>
     class reverse_iterator
     : public iterator<typename iterator_traits<_Iterator>::iterator_category,
                       typename iterator_traits<_Iterator>::value_type,
                       typename iterator_traits<_Iterator>::difference_type,
                       typename iterator_traits<_Iterator>::pointer,
                       typename iterator_traits<_Iterator>::reference>
     {
     protected:
       _Iterator current;
 
     public:
       typedef _Iterator iterator_type;
       typedef typename iterator_traits<_Iterator>::difference_type
                                                                difference_type;
       typedef typename iterator_traits<_Iterator>::reference reference;
       typedef typename iterator_traits<_Iterator>::pointer pointer;
 
     public:
 
 
 
       reverse_iterator() { }
 
 
 
 
       explicit
       reverse_iterator(iterator_type __x) : current(__x) { }
 
 
 
 
       reverse_iterator(const reverse_iterator& __x)
       : current(__x.current) { }
 
 
 
 
 
       template<typename _Iter>
         reverse_iterator(const reverse_iterator<_Iter>& __x)
         : current(__x.base()) { }
 
 
 
 
       iterator_type
       base() const { return current; }
 
 
 
 
 
 
       reference
       operator*() const
       {
         _Iterator __tmp = current;
         return *--__tmp;
       }
 
 
 
 
 
 
       pointer
       operator->() const { return &(operator*()); }
 
 
 
 
 
 
       reverse_iterator&
       operator++()
       {
         --current;
         return *this;
       }
 
 
 
 
 
 
       reverse_iterator
       operator++(int)
       {
         reverse_iterator __tmp = *this;
         --current;
         return __tmp;
       }
 
 
 
 
 
 
       reverse_iterator&
       operator--()
       {
         ++current;
         return *this;
       }
 
 
 
 
 
 
       reverse_iterator operator--(int)
       {
         reverse_iterator __tmp = *this;
         ++current;
         return __tmp;
       }
 
 
 
 
 
 
       reverse_iterator
       operator+(difference_type __n) const
       { return reverse_iterator(current - __n); }
 
 
 
 
 
 
       reverse_iterator&
       operator+=(difference_type __n)
       {
         current -= __n;
         return *this;
       }
 
 
 
 
 
 
       reverse_iterator
       operator-(difference_type __n) const
       { return reverse_iterator(current + __n); }
 
 
 
 
 
 
       reverse_iterator&
       operator-=(difference_type __n)
       {
         current += __n;
         return *this;
       }
 
 
 
 
 
 
       reference
       operator[](difference_type __n) const { return *(*this + __n); }
     };
 # 269 "/usr/include/c++/3.2/bits/stl_iterator.h" 3
   template<typename _Iterator>
     inline bool
     operator==(const reverse_iterator<_Iterator>& __x,
                const reverse_iterator<_Iterator>& __y)
     { return __x.base() == __y.base(); }
 
   template<typename _Iterator>
     inline bool
     operator<(const reverse_iterator<_Iterator>& __x,
               const reverse_iterator<_Iterator>& __y)
     { return __y.base() < __x.base(); }
 
   template<typename _Iterator>
     inline bool
     operator!=(const reverse_iterator<_Iterator>& __x,
                const reverse_iterator<_Iterator>& __y)
     { return !(__x == __y); }
 
   template<typename _Iterator>
     inline bool
     operator>(const reverse_iterator<_Iterator>& __x,
               const reverse_iterator<_Iterator>& __y)
     { return __y < __x; }
 
   template<typename _Iterator>
     inline bool
     operator<=(const reverse_iterator<_Iterator>& __x,
                 const reverse_iterator<_Iterator>& __y)
     { return !(__y < __x); }
 
   template<typename _Iterator>
     inline bool
     operator>=(const reverse_iterator<_Iterator>& __x,
                const reverse_iterator<_Iterator>& __y)
     { return !(__x < __y); }
 
   template<typename _Iterator>
     inline typename reverse_iterator<_Iterator>::difference_type
     operator-(const reverse_iterator<_Iterator>& __x,
               const reverse_iterator<_Iterator>& __y)
     { return __y.base() - __x.base(); }
 
   template<typename _Iterator>
     inline reverse_iterator<_Iterator>
     operator+(typename reverse_iterator<_Iterator>::difference_type __n,
               const reverse_iterator<_Iterator>& __x)
     { return reverse_iterator<_Iterator>(__x.base() - __n); }
 # 327 "/usr/include/c++/3.2/bits/stl_iterator.h" 3
   template<typename _Container>
     class back_insert_iterator
     : public iterator<output_iterator_tag, void, void, void, void>
     {
     protected:
       _Container* container;
 
     public:
 
       typedef _Container container_type;
 
 
       explicit
       back_insert_iterator(_Container& __x) : container(&__x) { }
 # 353 "/usr/include/c++/3.2/bits/stl_iterator.h" 3
       back_insert_iterator&
       operator=(typename _Container::const_reference __value)
       {
         container->push_back(__value);
         return *this;
       }
 
 
       back_insert_iterator&
       operator*() { return *this; }
 
 
       back_insert_iterator&
       operator++() { return *this; }
 
 
       back_insert_iterator
       operator++(int) { return *this; }
     };
 # 384 "/usr/include/c++/3.2/bits/stl_iterator.h" 3
   template<typename _Container>
     inline back_insert_iterator<_Container>
     back_inserter(_Container& __x)
     { return back_insert_iterator<_Container>(__x); }
 # 397 "/usr/include/c++/3.2/bits/stl_iterator.h" 3
   template<typename _Container>
     class front_insert_iterator
     : public iterator<output_iterator_tag, void, void, void, void>
     {
     protected:
       _Container* container;
 
     public:
 
       typedef _Container container_type;
 
 
       explicit front_insert_iterator(_Container& __x) : container(&__x) { }
 # 422 "/usr/include/c++/3.2/bits/stl_iterator.h" 3
       front_insert_iterator&
       operator=(typename _Container::const_reference __value)
       {
         container->push_front(__value);
         return *this;
       }
 
 
       front_insert_iterator&
       operator*() { return *this; }
 
 
       front_insert_iterator&
       operator++() { return *this; }
 
 
       front_insert_iterator
       operator++(int) { return *this; }
     };
 # 453 "/usr/include/c++/3.2/bits/stl_iterator.h" 3
   template<typename _Container>
     inline front_insert_iterator<_Container>
     front_inserter(_Container& __x)
     { return front_insert_iterator<_Container>(__x); }
 # 470 "/usr/include/c++/3.2/bits/stl_iterator.h" 3
   template<typename _Container>
     class insert_iterator
     : public iterator<output_iterator_tag, void, void, void, void>
     {
     protected:
       _Container* container;
       typename _Container::iterator iter;
 
     public:
 
       typedef _Container container_type;
 
 
 
 
 
       insert_iterator(_Container& __x, typename _Container::iterator __i)
       : container(&__x), iter(__i) {}
 # 512 "/usr/include/c++/3.2/bits/stl_iterator.h" 3
       insert_iterator&
       operator=(const typename _Container::const_reference __value)
       {
         iter = container->insert(iter, __value);
         ++iter;
         return *this;
       }
 
 
       insert_iterator&
       operator*() { return *this; }
 
 
       insert_iterator&
       operator++() { return *this; }
 
 
       insert_iterator&
       operator++(int) { return *this; }
     };
 # 544 "/usr/include/c++/3.2/bits/stl_iterator.h" 3
   template<typename _Container, typename _Iterator>
     inline insert_iterator<_Container>
     inserter(_Container& __x, _Iterator __i)
     {
       return insert_iterator<_Container>(__x,
                                          typename _Container::iterator(__i));
     }
 }
 
 namespace __gnu_cxx
 {
 
 
 
 
 
 
 
   using std::iterator_traits;
   using std::iterator;
   template<typename _Iterator, typename _Container>
     class __normal_iterator
       : public iterator<typename iterator_traits<_Iterator>::iterator_category,
                         typename iterator_traits<_Iterator>::value_type,
                         typename iterator_traits<_Iterator>::difference_type,
                         typename iterator_traits<_Iterator>::pointer,
                         typename iterator_traits<_Iterator>::reference>
     {
     protected:
       _Iterator _M_current;
 
     public:
       typedef typename iterator_traits<_Iterator>::difference_type
                                                                difference_type;
       typedef typename iterator_traits<_Iterator>::reference reference;
       typedef typename iterator_traits<_Iterator>::pointer pointer;
 
       __normal_iterator() : _M_current(_Iterator()) { }
 
       explicit
       __normal_iterator(const _Iterator& __i) : _M_current(__i) { }
 
 
       template<typename _Iter>
       inline __normal_iterator(const __normal_iterator<_Iter, _Container>& __i)
         : _M_current(__i.base()) { }
 
 
       reference
       operator*() const { return *_M_current; }
 
       pointer
       operator->() const { return _M_current; }
 
       __normal_iterator&
       operator++() { ++_M_current; return *this; }
 
       __normal_iterator
       operator++(int) { return __normal_iterator(_M_current++); }
 
 
       __normal_iterator&
       operator--() { --_M_current; return *this; }
 
       __normal_iterator
       operator--(int) { return __normal_iterator(_M_current--); }
 
 
       reference
       operator[](const difference_type& __n) const
       { return _M_current[__n]; }
 
       __normal_iterator&
       operator+=(const difference_type& __n)
       { _M_current += __n; return *this; }
 
       __normal_iterator
       operator+(const difference_type& __n) const
       { return __normal_iterator(_M_current + __n); }
 
       __normal_iterator&
       operator-=(const difference_type& __n)
       { _M_current -= __n; return *this; }
 
       __normal_iterator
       operator-(const difference_type& __n) const
       { return __normal_iterator(_M_current - __n); }
 
       const _Iterator&
       base() const { return _M_current; }
     };
 # 645 "/usr/include/c++/3.2/bits/stl_iterator.h" 3
   template<typename _IteratorL, typename _IteratorR, typename _Container>
   inline bool
   operator==(const __normal_iterator<_IteratorL, _Container>& __lhs,
              const __normal_iterator<_IteratorR, _Container>& __rhs)
   { return __lhs.base() == __rhs.base(); }
 
   template<typename _Iterator, typename _Container>
   inline bool
   operator==(const __normal_iterator<_Iterator, _Container>& __lhs,
              const __normal_iterator<_Iterator, _Container>& __rhs)
   { return __lhs.base() == __rhs.base(); }
 
   template<typename _IteratorL, typename _IteratorR, typename _Container>
   inline bool
   operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs,
              const __normal_iterator<_IteratorR, _Container>& __rhs)
   { return __lhs.base() != __rhs.base(); }
 
   template<typename _Iterator, typename _Container>
   inline bool
   operator!=(const __normal_iterator<_Iterator, _Container>& __lhs,
              const __normal_iterator<_Iterator, _Container>& __rhs)
   { return __lhs.base() != __rhs.base(); }
 
 
   template<typename _IteratorL, typename _IteratorR, typename _Container>
   inline bool
   operator<(const __normal_iterator<_IteratorL, _Container>& __lhs,
             const __normal_iterator<_IteratorR, _Container>& __rhs)
   { return __lhs.base() < __rhs.base(); }
 
   template<typename _Iterator, typename _Container>
   inline bool
   operator<(const __normal_iterator<_Iterator, _Container>& __lhs,
              const __normal_iterator<_Iterator, _Container>& __rhs)
   { return __lhs.base() < __rhs.base(); }
 
   template<typename _IteratorL, typename _IteratorR, typename _Container>
   inline bool
   operator>(const __normal_iterator<_IteratorL, _Container>& __lhs,
             const __normal_iterator<_IteratorR, _Container>& __rhs)
   { return __lhs.base() > __rhs.base(); }
 
   template<typename _Iterator, typename _Container>
   inline bool
   operator>(const __normal_iterator<_Iterator, _Container>& __lhs,
             const __normal_iterator<_Iterator, _Container>& __rhs)
   { return __lhs.base() > __rhs.base(); }
 
   template<typename _IteratorL, typename _IteratorR, typename _Container>
   inline bool
   operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs,
              const __normal_iterator<_IteratorR, _Container>& __rhs)
   { return __lhs.base() <= __rhs.base(); }
 
   template<typename _Iterator, typename _Container>
   inline bool
   operator<=(const __normal_iterator<_Iterator, _Container>& __lhs,
              const __normal_iterator<_Iterator, _Container>& __rhs)
   { return __lhs.base() <= __rhs.base(); }
 
   template<typename _IteratorL, typename _IteratorR, typename _Container>
   inline bool
   operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs,
              const __normal_iterator<_IteratorR, _Container>& __rhs)
   { return __lhs.base() >= __rhs.base(); }
 
   template<typename _Iterator, typename _Container>
   inline bool
   operator>=(const __normal_iterator<_Iterator, _Container>& __lhs,
              const __normal_iterator<_Iterator, _Container>& __rhs)
   { return __lhs.base() >= __rhs.base(); }
 
 
 
 
 
   template<typename _IteratorL, typename _IteratorR, typename _Container>
   inline typename __normal_iterator<_IteratorL, _Container>::difference_type
   operator-(const __normal_iterator<_IteratorL, _Container>& __lhs,
              const __normal_iterator<_IteratorR, _Container>& __rhs)
   { return __lhs.base() - __rhs.base(); }
 
   template<typename _Iterator, typename _Container>
   inline __normal_iterator<_Iterator, _Container>
   operator+(typename __normal_iterator<_Iterator, _Container>::difference_type __n,
             const __normal_iterator<_Iterator, _Container>& __i)
   { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); }
 }
 # 76 "/usr/include/c++/3.2/bits/stl_algobase.h" 2 3
 
 
 namespace std
 {
 # 91 "/usr/include/c++/3.2/bits/stl_algobase.h" 3
   template<typename _ForwardIter1, typename _ForwardIter2>
     inline void
     iter_swap(_ForwardIter1 __a, _ForwardIter2 __b)
     {
       typedef typename iterator_traits<_ForwardIter1>::value_type _ValueType1;
       typedef typename iterator_traits<_ForwardIter2>::value_type _ValueType2;
 
 
      
      
      
      
 
       _ValueType1 __tmp = *__a;
       *__a = *__b;
       *__b = __tmp;
     }
 # 118 "/usr/include/c++/3.2/bits/stl_algobase.h" 3
   template<typename _Tp>
     inline void
     swap(_Tp& __a, _Tp& __b)
     {
 
      
 
       _Tp __tmp = __a;
       __a = __b;
       __b = __tmp;
     }
 # 146 "/usr/include/c++/3.2/bits/stl_algobase.h" 3
   template<typename _Tp>
     inline const _Tp&
     min(const _Tp& __a, const _Tp& __b)
     {
 
      
 
       if (__b < __a) return __b; return __a;
     }
 # 166 "/usr/include/c++/3.2/bits/stl_algobase.h" 3
   template<typename _Tp>
     inline const _Tp&
     max(const _Tp& __a, const _Tp& __b)
     {
 
      
 
       if (__a < __b) return __b; return __a;
     }
 # 186 "/usr/include/c++/3.2/bits/stl_algobase.h" 3
   template<typename _Tp, typename _Compare>
     inline const _Tp&
     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
     {
 
       if (__comp(__b, __a)) return __b; return __a;
     }
 # 204 "/usr/include/c++/3.2/bits/stl_algobase.h" 3
   template<typename _Tp, typename _Compare>
     inline const _Tp&
     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
     {
 
       if (__comp(__a, __b)) return __b; return __a;
     }
 # 221 "/usr/include/c++/3.2/bits/stl_algobase.h" 3
   template<typename _InputIter, typename _OutputIter>
     inline _OutputIter
     __copy(_InputIter __first, _InputIter __last,
            _OutputIter __result,
            input_iterator_tag)
     {
       for ( ; __first != __last; ++__result, ++__first)
         *__result = *__first;
       return __result;
     }
 
   template<typename _RandomAccessIter, typename _OutputIter>
     inline _OutputIter
     __copy(_RandomAccessIter __first, _RandomAccessIter __last,
            _OutputIter __result,
            random_access_iterator_tag)
     {
       typedef typename iterator_traits<_RandomAccessIter>::difference_type
           _Distance;
       for (_Distance __n = __last - __first; __n > 0; --__n) {
         *__result = *__first;
         ++__first;
         ++__result;
       }
       return __result;
     }
 
   template<typename _Tp>
     inline _Tp*
     __copy_trivial(const _Tp* __first, const _Tp* __last, _Tp* __result)
     {
       memmove(__result, __first, sizeof(_Tp) * (__last - __first));
       return __result + (__last - __first);
     }
 
   template<typename _InputIter, typename _OutputIter>
     inline _OutputIter
     __copy_aux2(_InputIter __first, _InputIter __last,
                 _OutputIter __result, __false_type)
     { return __copy(__first, __last, __result, __iterator_category(__first)); }
 
   template<typename _InputIter, typename _OutputIter>
     inline _OutputIter
     __copy_aux2(_InputIter __first, _InputIter __last,
                 _OutputIter __result, __true_type)
     { return __copy(__first, __last, __result, __iterator_category(__first)); }
 
   template<typename _Tp>
     inline _Tp*
     __copy_aux2(_Tp* __first, _Tp* __last,
                 _Tp* __result, __true_type)
     { return __copy_trivial(__first, __last, __result); }
 
   template<typename _Tp>
     inline _Tp*
     __copy_aux2(const _Tp* __first, const _Tp* __last,
                 _Tp* __result, __true_type)
     { return __copy_trivial(__first, __last, __result); }
 
   template<typename _InputIter, typename _OutputIter>
     inline _OutputIter
     __copy_ni2(_InputIter __first, _InputIter __last,
                _OutputIter __result, __true_type)
     {
       typedef typename iterator_traits<_InputIter>::value_type
           _ValueType;
       typedef typename __type_traits<_ValueType>::has_trivial_assignment_operator
           _Trivial;
       return _OutputIter(__copy_aux2(__first, __last,
                                      __result.base(),
                                      _Trivial()));
     }
 
   template<typename _InputIter, typename _OutputIter>
     inline _OutputIter
     __copy_ni2(_InputIter __first, _InputIter __last,
                _OutputIter __result, __false_type)
     {
       typedef typename iterator_traits<_InputIter>::value_type
           _ValueType;
       typedef typename __type_traits<_ValueType>::has_trivial_assignment_operator
           _Trivial;
       return __copy_aux2(__first, __last,
                          __result,
                          _Trivial());
     }
 
   template<typename _InputIter, typename _OutputIter>
     inline _OutputIter
     __copy_ni1(_InputIter __first, _InputIter __last,
                _OutputIter __result, __true_type)
     {
       typedef typename _Is_normal_iterator<_OutputIter>::_Normal __Normal;
       return __copy_ni2(__first.base(), __last.base(), __result, __Normal());
     }
 
   template<typename _InputIter, typename _OutputIter>
     inline _OutputIter
     __copy_ni1(_InputIter __first, _InputIter __last,
                _OutputIter __result, __false_type)
     {
       typedef typename _Is_normal_iterator<_OutputIter>::_Normal __Normal;
       return __copy_ni2(__first, __last, __result, __Normal());
     }
 # 339 "/usr/include/c++/3.2/bits/stl_algobase.h" 3
   template<typename _InputIter, typename _OutputIter>
     inline _OutputIter
     copy(_InputIter __first, _InputIter __last, _OutputIter __result)
     {
 
      
      
 
 
        typedef typename _Is_normal_iterator<_InputIter>::_Normal __Normal;
        return __copy_ni1(__first, __last, __result, __Normal());
     }
 
 
 
 
   template<typename _BidirectionalIter1, typename _BidirectionalIter2>
     inline _BidirectionalIter2
     __copy_backward(_BidirectionalIter1 __first, _BidirectionalIter1 __last,
                     _BidirectionalIter2 __result,
                     bidirectional_iterator_tag)
     {
       while (__first != __last)
         *--__result = *--__last;
       return __result;
     }
 
   template<typename _RandomAccessIter, typename _BidirectionalIter>
     inline _BidirectionalIter
     __copy_backward(_RandomAccessIter __first, _RandomAccessIter __last,
                     _BidirectionalIter __result,
                     random_access_iterator_tag)
     {
       typename iterator_traits<_RandomAccessIter>::difference_type __n;
       for (__n = __last - __first; __n > 0; --__n)
         *--__result = *--__last;
       return __result;
     }
 
 
 
 
 
 
 
   template<typename _BidirectionalIter1, typename _BidirectionalIter2,
            typename _BoolType>
     struct __copy_backward_dispatch
     {
       static _BidirectionalIter2
       copy(_BidirectionalIter1 __first, _BidirectionalIter1 __last,
            _BidirectionalIter2 __result)
       {
         return __copy_backward(__first, __last,
                                __result,
                                __iterator_category(__first));
       }
     };
 
   template<typename _Tp>
     struct __copy_backward_dispatch<_Tp*, _Tp*, __true_type>
     {
       static _Tp*
       copy(const _Tp* __first, const _Tp* __last, _Tp* __result)
       {
         const ptrdiff_t _Num = __last - __first;
         memmove(__result - _Num, __first, sizeof(_Tp) * _Num);
         return __result - _Num;
       }
     };
 
   template<typename _Tp>
     struct __copy_backward_dispatch<const _Tp*, _Tp*, __true_type>
     {
       static _Tp*
       copy(const _Tp* __first, const _Tp* __last, _Tp* __result)
       {
         return __copy_backward_dispatch<_Tp*, _Tp*, __true_type>
           ::copy(__first, __last, __result);
       }
     };
 
   template<typename _BI1, typename _BI2>
     inline _BI2
     __copy_backward_aux(_BI1 __first, _BI1 __last, _BI2 __result)
     {
       typedef typename __type_traits<typename iterator_traits<_BI2>::value_type>
                             ::has_trivial_assignment_operator _Trivial;
       return __copy_backward_dispatch<_BI1, _BI2, _Trivial>
                   ::copy(__first, __last, __result);
     }
 
   template <typename _BI1, typename _BI2>
     inline _BI2
     __copy_backward_output_normal_iterator(_BI1 __first, _BI1 __last,
                                            _BI2 __result, __true_type)
     { return _BI2(__copy_backward_aux(__first, __last, __result.base())); }
 
   template <typename _BI1, typename _BI2>
     inline _BI2
     __copy_backward_output_normal_iterator(_BI1 __first, _BI1 __last,
                                            _BI2 __result, __false_type)
     { return __copy_backward_aux(__first, __last, __result); }
 
   template <typename _BI1, typename _BI2>
     inline _BI2
     __copy_backward_input_normal_iterator(_BI1 __first, _BI1 __last,
                                           _BI2 __result, __true_type)
     {
       typedef typename _Is_normal_iterator<_BI2>::_Normal __Normal;
       return __copy_backward_output_normal_iterator(__first.base(), __last.base(),
                                                     __result, __Normal());
     }
 
   template <typename _BI1, typename _BI2>
     inline _BI2
     __copy_backward_input_normal_iterator(_BI1 __first, _BI1 __last,
                                           _BI2 __result, __false_type)
     {
       typedef typename _Is_normal_iterator<_BI2>::_Normal __Normal;
       return __copy_backward_output_normal_iterator(__first, __last, __result,
                                                     __Normal());
     }
 # 477 "/usr/include/c++/3.2/bits/stl_algobase.h" 3
   template <typename _BI1, typename _BI2>
     inline _BI2
     copy_backward(_BI1 __first, _BI1 __last, _BI2 __result)
     {
 
      
      
      
 
 
 
       typedef typename _Is_normal_iterator<_BI1>::_Normal __Normal;
       return __copy_backward_input_normal_iterator(__first, __last, __result,
                                                    __Normal());
     }
 # 509 "/usr/include/c++/3.2/bits/stl_algobase.h" 3
   template<typename _ForwardIter, typename _Tp>
     void
     fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __value)
     {
 
      
 
       for ( ; __first != __last; ++__first)
         *__first = __value;
     }
 # 531 "/usr/include/c++/3.2/bits/stl_algobase.h" 3
   template<typename _OutputIter, typename _Size, typename _Tp>
     _OutputIter
     fill_n(_OutputIter __first, _Size __n, const _Tp& __value)
     {
 
      
 
       for ( ; __n > 0; --__n, ++__first)
         *__first = __value;
       return __first;
     }
 
 
 
   inline void
   fill(unsigned char* __first, unsigned char* __last, const unsigned char& __c)
   {
     unsigned char __tmp = __c;
     memset(__first, __tmp, __last - __first);
   }
 
   inline void
   fill(signed char* __first, signed char* __last, const signed char& __c)
   {
     signed char __tmp = __c;
     memset(__first, static_cast<unsigned char>(__tmp), __last - __first);
   }
 
   inline void
   fill(char* __first, char* __last, const char& __c)
   {
     char __tmp = __c;
     memset(__first, static_cast<unsigned char>(__tmp), __last - __first);
   }
 
   template<typename _Size>
     inline unsigned char*
     fill_n(unsigned char* __first, _Size __n, const unsigned char& __c)
     {
       fill(__first, __first + __n, __c);
       return __first + __n;
     }
 
   template<typename _Size>
     inline signed char*
     fill_n(char* __first, _Size __n, const signed char& __c)
     {
       fill(__first, __first + __n, __c);
       return __first + __n;
     }
 
   template<typename _Size>
     inline char*
     fill_n(char* __first, _Size __n, const char& __c)
     {
       fill(__first, __first + __n, __c);
       return __first + __n;
     }
 # 606 "/usr/include/c++/3.2/bits/stl_algobase.h" 3
   template<typename _InputIter1, typename _InputIter2>
     pair<_InputIter1, _InputIter2>
     mismatch(_InputIter1 __first1, _InputIter1 __last1,
              _InputIter2 __first2)
     {
 
      
      
      
 
      
 
 
       while (__first1 != __last1 && *__first1 == *__first2) {
         ++__first1;
         ++__first2;
       }
       return pair<_InputIter1, _InputIter2>(__first1, __first2);
     }
 # 640 "/usr/include/c++/3.2/bits/stl_algobase.h" 3
   template<typename _InputIter1, typename _InputIter2, typename _BinaryPredicate>
     pair<_InputIter1, _InputIter2>
     mismatch(_InputIter1 __first1, _InputIter1 __last1,
              _InputIter2 __first2,
              _BinaryPredicate __binary_pred)
     {
 
      
      
 
       while (__first1 != __last1 && __binary_pred(*__first1, *__first2)) {
         ++__first1;
         ++__first2;
       }
       return pair<_InputIter1, _InputIter2>(__first1, __first2);
     }
 # 668 "/usr/include/c++/3.2/bits/stl_algobase.h" 3
   template<typename _InputIter1, typename _InputIter2>
     inline bool
     equal(_InputIter1 __first1, _InputIter1 __last1,
           _InputIter2 __first2)
     {
 
      
      
      
 
 
 
       for ( ; __first1 != __last1; ++__first1, ++__first2)
         if (!(*__first1 == *__first2))
           return false;
       return true;
     }
 # 699 "/usr/include/c++/3.2/bits/stl_algobase.h" 3
   template<typename _InputIter1, typename _InputIter2, typename _BinaryPredicate>
     inline bool
     equal(_InputIter1 __first1, _InputIter1 __last1,
           _InputIter2 __first2,
           _BinaryPredicate __binary_pred)
     {
 
      
      
 
       for ( ; __first1 != __last1; ++__first1, ++__first2)
         if (!__binary_pred(*__first1, *__first2))
           return false;
       return true;
     }
 # 732 "/usr/include/c++/3.2/bits/stl_algobase.h" 3
   template<typename _InputIter1, typename _InputIter2>
     bool
     lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1,
                             _InputIter2 __first2, _InputIter2 __last2)
     {
 
      
      
      
 
      
 
 
       for ( ; __first1 != __last1 && __first2 != __last2
             ; ++__first1, ++__first2) {
         if (*__first1 < *__first2)
           return true;
         if (*__first2 < *__first1)
           return false;
       }
       return __first1 == __last1 && __first2 != __last2;
     }
 # 767 "/usr/include/c++/3.2/bits/stl_algobase.h" 3
   template<typename _InputIter1, typename _InputIter2, typename _Compare>
     bool
     lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1,
                             _InputIter2 __first2, _InputIter2 __last2,
                             _Compare __comp)
     {
 
      
      
 
       for ( ; __first1 != __last1 && __first2 != __last2
             ; ++__first1, ++__first2) {
         if (__comp(*__first1, *__first2))
           return true;
         if (__comp(*__first2, *__first1))
           return false;
       }
       return __first1 == __last1 && __first2 != __last2;
     }
 
   inline bool
   lexicographical_compare(const unsigned char* __first1, const unsigned char* __last1,
                           const unsigned char* __first2, const unsigned char* __last2)
   {
     const size_t __len1 = __last1 - __first1;
     const size_t __len2 = __last2 - __first2;
     const int __result = memcmp(__first1, __first2, min(__len1, __len2));
     return __result != 0 ? __result < 0 : __len1 < __len2;
   }
 
   inline bool
   lexicographical_compare(const char* __first1, const char* __last1,
                           const char* __first2, const char* __last2)
   {
 
     return lexicographical_compare((const signed char*) __first1,
                                    (const signed char*) __last1,
                                    (const signed char*) __first2,
                                    (const signed char*) __last2);
 
 
 
 
 
 
   }
 
 }
 # 55 "/usr/include/c++/3.2/memory" 2 3
 # 1 "/usr/include/c++/3.2/bits/stl_alloc.h" 1 3
 # 84 "/usr/include/c++/3.2/bits/stl_alloc.h" 3
 # 1 "/usr/include/c++/3.2/cassert" 1 3
 # 47 "/usr/include/c++/3.2/cassert" 3
 
 # 1 "/usr/include/assert.h" 1 3
 # 65 "/usr/include/assert.h" 3
 extern "C" {
 
 
 extern void __assert_fail (__const char *__assertion, __const char *__file,
                            unsigned int __line, __const char *__function)
      throw () __attribute__ ((__noreturn__));
 
 
 extern void __assert_perror_fail (int __errnum, __const char *__file,
                                   unsigned int __line,
                                   __const char *__function)
      throw () __attribute__ ((__noreturn__));
 
 
 
 
 extern void __assert (const char *__assertion, const char *__file, int __line)
      throw () __attribute__ ((__noreturn__));
 
 
 }
 # 49 "/usr/include/c++/3.2/cassert" 2 3
 # 85 "/usr/include/c++/3.2/bits/stl_alloc.h" 2 3
 # 1 "/usr/include/c++/3.2/bits/functexcept.h" 1 3
 # 34 "/usr/include/c++/3.2/bits/functexcept.h" 3
 # 1 "/usr/include/c++/3.2/exception_defines.h" 1 3
 # 35 "/usr/include/c++/3.2/bits/functexcept.h" 2 3
 
 namespace std
 {
 
   void
   __throw_bad_exception(void);
 
 
   void
   __throw_bad_alloc(void);
 
 
   void
   __throw_bad_cast(void);
 
   void
   __throw_bad_typeid(void);
 
 
   void
   __throw_logic_error(const char* __s);
 
   void
   __throw_domain_error(const char* __s);
 
   void
   __throw_invalid_argument(const char* __s);
 
   void
   __throw_length_error(const char* __s);
 
   void
   __throw_out_of_range(const char* __s);
 
   void
   __throw_runtime_error(const char* __s);
 
   void
   __throw_range_error(const char* __s);
 
   void
   __throw_overflow_error(const char* __s);
 
   void
   __throw_underflow_error(const char* __s);
 
 
   void
   __throw_ios_failure(const char* __s);
 }
 # 86 "/usr/include/c++/3.2/bits/stl_alloc.h" 2 3
 # 1 "/usr/include/c++/3.2/bits/stl_threads.h" 1 3
 # 54 "/usr/include/c++/3.2/bits/stl_threads.h" 3
 namespace std
 {
 
 
 
 
   struct _Refcount_Base
   {
 
     typedef size_t _RC_t;
 
 
     volatile _RC_t _M_ref_count;
 
 
     __gthread_mutex_t _M_ref_count_lock;
 
     _Refcount_Base(_RC_t __n) : _M_ref_count(__n)
     {
 
       __gthread_mutex_t __tmp = {0, 0, 0, PTHREAD_MUTEX_TIMED_NP, { 0, 0 }};
       _M_ref_count_lock = __tmp;
 
 
 
 
 
     }
 
     void
     _M_incr()
     {
       __gthread_mutex_lock(&_M_ref_count_lock);
       ++_M_ref_count;
       __gthread_mutex_unlock(&_M_ref_count_lock);
     }
 
     _RC_t
     _M_decr()
     {
       __gthread_mutex_lock(&_M_ref_count_lock);
       volatile _RC_t __tmp = --_M_ref_count;
       __gthread_mutex_unlock(&_M_ref_count_lock);
       return __tmp;
     }
   };
 # 109 "/usr/include/c++/3.2/bits/stl_threads.h" 3
   template<int __dummy>
     struct _Swap_lock_struct
     { static __gthread_mutex_t _S_swap_lock; };
 
   template<int __dummy>
     __gthread_mutex_t
     _Swap_lock_struct<__dummy>::_S_swap_lock = {0, 0, 0, PTHREAD_MUTEX_TIMED_NP, { 0, 0 }};
 
 
 
   inline unsigned long
   _Atomic_swap(unsigned long * __p, unsigned long __q)
   {
     __gthread_mutex_lock(&_Swap_lock_struct<0>::_S_swap_lock);
     unsigned long __result = *__p;
     *__p = __q;
     __gthread_mutex_unlock(&_Swap_lock_struct<0>::_S_swap_lock);
     return __result;
   }
 # 151 "/usr/include/c++/3.2/bits/stl_threads.h" 3
   struct _STL_mutex_lock
   {
 
 
 
 
 
     __gthread_mutex_t _M_lock;
 
     void
     _M_initialize()
     {
 # 184 "/usr/include/c++/3.2/bits/stl_threads.h" 3
     }
 
     void
     _M_acquire_lock()
     {
 
 
 
       __gthread_mutex_lock(&_M_lock);
     }
 
     void
     _M_release_lock()
     {
 
 
 
       __gthread_mutex_unlock(&_M_lock);
     }
   };
 # 220 "/usr/include/c++/3.2/bits/stl_threads.h" 3
   struct _STL_auto_lock
   {
     _STL_mutex_lock& _M_lock;
 
     _STL_auto_lock(_STL_mutex_lock& __lock) : _M_lock(__lock)
     { _M_lock._M_acquire_lock(); }
 
     ~_STL_auto_lock() { _M_lock._M_release_lock(); }
 
   private:
     void operator=(const _STL_auto_lock&);
     _STL_auto_lock(const _STL_auto_lock&);
   };
 
 }
 # 87 "/usr/include/c++/3.2/bits/stl_alloc.h" 2 3
 
 namespace std
 {
 # 98 "/usr/include/c++/3.2/bits/stl_alloc.h" 3
   class __new_alloc
   {
   public:
     static void*
     allocate(size_t __n)
     { return ::operator new(__n); }
 
     static void
     deallocate(void* __p, size_t)
     { ::operator delete(__p); }
   };
 # 121 "/usr/include/c++/3.2/bits/stl_alloc.h" 3
   template <int __inst>
     class __malloc_alloc_template
     {
     private:
       static void* _S_oom_malloc(size_t);
       static void* _S_oom_realloc(void*, size_t);
       static void (* __malloc_alloc_oom_handler)();
 
     public:
       static void*
       allocate(size_t __n)
       {
         void* __result = malloc(__n);
         if (0 == __result) __result = _S_oom_malloc(__n);
         return __result;
       }
 
       static void
       deallocate(void* __p, size_t )
       { free(__p); }
 
       static void*
       reallocate(void* __p, size_t , size_t __new_sz)
       {
         void* __result = realloc(__p, __new_sz);
         if (0 == __result) __result = _S_oom_realloc(__p, __new_sz);
         return __result;
       }
 
       static void (* __set_malloc_handler(void (*__f)()))()
       {
         void (* __old)() = __malloc_alloc_oom_handler;
         __malloc_alloc_oom_handler = __f;
         return(__old);
       }
     };
 
 
   template <int __inst>
     void (* __malloc_alloc_template<__inst>::__malloc_alloc_oom_handler)() = 0;
 
   template <int __inst>
     void*
     __malloc_alloc_template<__inst>::_S_oom_malloc(size_t __n)
     {
       void (* __my_malloc_handler)();
       void* __result;
 
       for (;;)
         {
           __my_malloc_handler = __malloc_alloc_oom_handler;
           if (0 == __my_malloc_handler)
             std::__throw_bad_alloc();
           (*__my_malloc_handler)();
           __result = malloc(__n);
           if (__result)
             return(__result);
         }
     }
 
   template <int __inst>
     void*
     __malloc_alloc_template<__inst>::_S_oom_realloc(void* __p, size_t __n)
     {
       void (* __my_malloc_handler)();
       void* __result;
 
       for (;;)
         {
           __my_malloc_handler = __malloc_alloc_oom_handler;
           if (0 == __my_malloc_handler)
             std::__throw_bad_alloc();
           (*__my_malloc_handler)();
           __result = realloc(__p, __n);
           if (__result)
             return(__result);
         }
     }
 
 
 
 
 
 
   typedef __new_alloc __mem_interface;
 # 219 "/usr/include/c++/3.2/bits/stl_alloc.h" 3
   template<class _Tp, class _Alloc>
   class __simple_alloc
   {
   public:
     static _Tp* allocate(size_t __n)
     { return 0 == __n ? 0 : (_Tp*) _Alloc::allocate(__n * sizeof (_Tp)); }
 
     static _Tp* allocate()
     { return (_Tp*) _Alloc::allocate(sizeof (_Tp)); }
 
     static void deallocate(_Tp* __p, size_t __n)
     { if (0 != __n) _Alloc::deallocate(__p, __n * sizeof (_Tp)); }
 
     static void deallocate(_Tp* __p)
     { _Alloc::deallocate(__p, sizeof (_Tp)); }
   };
 # 251 "/usr/include/c++/3.2/bits/stl_alloc.h" 3
   template <class _Alloc>
   class __debug_alloc
   {
   private:
     enum {_S_extra = 8};
 
 
   public:
 
     static void* allocate(size_t __n)
     {
       char* __result = (char*)_Alloc::allocate(__n + (int) _S_extra);
       *(size_t*)__result = __n;
       return __result + (int) _S_extra;
     }
 
     static void deallocate(void* __p, size_t __n)
     {
       char* __real_p = (char*)__p - (int) _S_extra;
       (static_cast<void> ((*(size_t*)__real_p == __n) ? 0 : (__assert_fail ("*(size_t*)__real_p == __n", "/usr/include/c++/3.2/bits/stl_alloc.h", 270, __PRETTY_FUNCTION__), 0)));
       _Alloc::deallocate(__real_p, __n + (int) _S_extra);
     }
 
     static void* reallocate(void* __p, size_t __old_sz, size_t __new_sz)
     {
       char* __real_p = (char*)__p - (int) _S_extra;
       (static_cast<void> ((*(size_t*)__real_p == __old_sz) ? 0 : (__assert_fail ("*(size_t*)__real_p == __old_sz", "/usr/include/c++/3.2/bits/stl_alloc.h", 277, __PRETTY_FUNCTION__), 0)));
       char* __result = (char*)
         _Alloc::reallocate(__real_p, __old_sz + (int) _S_extra,
                                      __new_sz + (int) _S_extra);
       *(size_t*)__result = __new_sz;
       return __result + (int) _S_extra;
     }
   };
 # 324 "/usr/include/c++/3.2/bits/stl_alloc.h" 3
 template<bool __threads, int __inst>
   class __default_alloc_template
   {
   private:
     enum {_ALIGN = 8};
     enum {_MAX_BYTES = 128};
     enum {_NFREELISTS = _MAX_BYTES / _ALIGN};
 
     union _Obj
     {
       union _Obj* _M_free_list_link;
       char _M_client_data[1];
     };
 
     static _Obj* volatile _S_free_list[_NFREELISTS];
 
 
     static char* _S_start_free;
     static char* _S_end_free;
     static size_t _S_heap_size;
 
     static _STL_mutex_lock _S_node_allocator_lock;
 
     static size_t
     _S_round_up(size_t __bytes)
     { return (((__bytes) + (size_t) _ALIGN-1) & ~((size_t) _ALIGN - 1)); }
 
     static size_t
     _S_freelist_index(size_t __bytes)
     { return (((__bytes) + (size_t)_ALIGN-1)/(size_t)_ALIGN - 1); }
 
 
 
     static void*
     _S_refill(size_t __n);
 
 
 
     static char*
     _S_chunk_alloc(size_t __size, int& __nobjs);
 
 
 
     class _Lock
     {
     public:
       _Lock() { if (__threads) _S_node_allocator_lock._M_acquire_lock(); }
       ~_Lock() { if (__threads) _S_node_allocator_lock._M_release_lock(); }
     } __attribute__ ((__unused__));
     friend class _Lock;
 
   public:
 
     static void*
     allocate(size_t __n)
     {
       void* __ret = 0;
 
       if (__n > (size_t) _MAX_BYTES)
         __ret = __mem_interface::allocate(__n);
       else
         {
           _Obj* volatile* __my_free_list = _S_free_list
             + _S_freelist_index(__n);
 
 
 
           _Lock __lock_instance;
           _Obj* __restrict__ __result = *__my_free_list;
           if (__result == 0)
             __ret = _S_refill(_S_round_up(__n));
           else
             {
               *__my_free_list = __result -> _M_free_list_link;
               __ret = __result;
             }
         }
       return __ret;
     };
 
 
     static void
     deallocate(void* __p, size_t __n)
     {
       if (__n > (size_t) _MAX_BYTES)
         __mem_interface::deallocate(__p, __n);
       else
         {
           _Obj* volatile* __my_free_list
             = _S_free_list + _S_freelist_index(__n);
           _Obj* __q = (_Obj*)__p;
 
 
 
           _Lock __lock_instance;
           __q -> _M_free_list_link = *__my_free_list;
           *__my_free_list = __q;
         }
     }
 
     static void*
     reallocate(void* __p, size_t __old_sz, size_t __new_sz);
   };
 
 
   template<bool __threads, int __inst>
     inline bool
     operator==(const __default_alloc_template<__threads, __inst>&,
                const __default_alloc_template<__threads, __inst>&)
     { return true; }
 
   template<bool __threads, int __inst>
     inline bool
     operator!=(const __default_alloc_template<__threads, __inst>&,
                const __default_alloc_template<__threads, __inst>&)
     { return false; }
 
 
 
 
 
   template<bool __threads, int __inst>
     char*
     __default_alloc_template<__threads, __inst>::_S_chunk_alloc(size_t __size,
                                                                 int& __nobjs)
     {
       char* __result;
       size_t __total_bytes = __size * __nobjs;
       size_t __bytes_left = _S_end_free - _S_start_free;
 
       if (__bytes_left >= __total_bytes)
       {
         __result = _S_start_free;
         _S_start_free += __total_bytes;
         return(__result);
       }
       else if (__bytes_left >= __size)
         {
           __nobjs = (int)(__bytes_left/__size);
           __total_bytes = __size * __nobjs;
           __result = _S_start_free;
           _S_start_free += __total_bytes;
           return(__result);
         }
       else
         {
           size_t __bytes_to_get =
             2 * __total_bytes + _S_round_up(_S_heap_size >> 4);
 
           if (__bytes_left > 0)
             {
               _Obj* volatile* __my_free_list =
                 _S_free_list + _S_freelist_index(__bytes_left);
 
               ((_Obj*)_S_start_free) -> _M_free_list_link = *__my_free_list;
               *__my_free_list = (_Obj*)_S_start_free;
             }
           _S_start_free = (char*) __mem_interface::allocate(__bytes_to_get);
           if (0 == _S_start_free)
             {
               size_t __i;
               _Obj* volatile* __my_free_list;
               _Obj* __p;
 
 
 
               __i = __size;
               for (; __i <= (size_t) _MAX_BYTES; __i += (size_t) _ALIGN)
                 {
                   __my_free_list = _S_free_list + _S_freelist_index(__i);
                   __p = *__my_free_list;
                   if (0 != __p)
                     {
                       *__my_free_list = __p -> _M_free_list_link;
                       _S_start_free = (char*)__p;
                       _S_end_free = _S_start_free + __i;
                       return(_S_chunk_alloc(__size, __nobjs));
 
 
                     }
                 }
               _S_end_free = 0;
               _S_start_free = (char*)__mem_interface::allocate(__bytes_to_get);
 
 
             }
           _S_heap_size += __bytes_to_get;
           _S_end_free = _S_start_free + __bytes_to_get;
           return(_S_chunk_alloc(__size, __nobjs));
         }
     }
 
 
 
 
 
   template<bool __threads, int __inst>
     void*
     __default_alloc_template<__threads, __inst>::_S_refill(size_t __n)
     {
       int __nobjs = 20;
       char* __chunk = _S_chunk_alloc(__n, __nobjs);
       _Obj* volatile* __my_free_list;
       _Obj* __result;
       _Obj* __current_obj;
       _Obj* __next_obj;
       int __i;
 
       if (1 == __nobjs) return(__chunk);
       __my_free_list = _S_free_list + _S_freelist_index(__n);
 
 
       __result = (_Obj*)__chunk;
       *__my_free_list = __next_obj = (_Obj*)(__chunk + __n);
       for (__i = 1; ; __i++) {
         __current_obj = __next_obj;
         __next_obj = (_Obj*)((char*)__next_obj + __n);
         if (__nobjs - 1 == __i) {
           __current_obj -> _M_free_list_link = 0;
           break;
         } else {
           __current_obj -> _M_free_list_link = __next_obj;
         }
       }
       return(__result);
     }
 
 
   template<bool threads, int inst>
     void*
     __default_alloc_template<threads, inst>::reallocate(void* __p,
                                                         size_t __old_sz,
                                                         size_t __new_sz)
     {
       void* __result;
       size_t __copy_sz;
 
       if (__old_sz > (size_t) _MAX_BYTES && __new_sz > (size_t) _MAX_BYTES) {
         return(realloc(__p, __new_sz));
       }
       if (_S_round_up(__old_sz) == _S_round_up(__new_sz)) return(__p);
       __result = allocate(__new_sz);
       __copy_sz = __new_sz > __old_sz? __old_sz : __new_sz;
       memcpy(__result, __p, __copy_sz);
       deallocate(__p, __old_sz);
       return(__result);
     }
 
   template<bool __threads, int __inst>
   _STL_mutex_lock
   __default_alloc_template<__threads, __inst>::_S_node_allocator_lock
   = { {0, 0, 0, PTHREAD_MUTEX_TIMED_NP, { 0, 0 }} };
 
   template<bool __threads, int __inst>
   char* __default_alloc_template<__threads, __inst>::_S_start_free = 0;
 
   template<bool __threads, int __inst>
   char* __default_alloc_template<__threads, __inst>::_S_end_free = 0;
 
   template<bool __threads, int __inst>
   size_t __default_alloc_template<__threads, __inst>::_S_heap_size = 0;
 
   template<bool __threads, int __inst>
   typename __default_alloc_template<__threads, __inst>::_Obj* volatile
   __default_alloc_template<__threads, __inst>::_S_free_list[_NFREELISTS];
 
   typedef __default_alloc_template<true, 0> __alloc;
   typedef __default_alloc_template<false, 0> __single_client_alloc;
 # 613 "/usr/include/c++/3.2/bits/stl_alloc.h" 3
 template <class _Tp>
 class allocator
 {
   typedef __alloc _Alloc;
 public:
   typedef size_t size_type;
   typedef ptrdiff_t difference_type;
   typedef _Tp* pointer;
   typedef const _Tp* const_pointer;
   typedef _Tp& reference;
   typedef const _Tp& const_reference;
   typedef _Tp value_type;
 
   template <class _Tp1> struct rebind {
     typedef allocator<_Tp1> other;
   };
 
   allocator() throw() {}
   allocator(const allocator&) throw() {}
   template <class _Tp1> allocator(const allocator<_Tp1>&) throw() {}
   ~allocator() throw() {}
 
   pointer address(reference __x) const { return &__x; }
   const_pointer address(const_reference __x) const { return &__x; }
 
 
 
   _Tp* allocate(size_type __n, const void* = 0) {
     return __n != 0 ? static_cast<_Tp*>(_Alloc::allocate(__n * sizeof(_Tp)))
                     : 0;
   }
 
 
   void deallocate(pointer __p, size_type __n)
     { _Alloc::deallocate(__p, __n * sizeof(_Tp)); }
 
   size_type max_size() const throw()
     { return size_t(-1) / sizeof(_Tp); }
 
   void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); }
   void destroy(pointer __p) { __p->~_Tp(); }
 };
 
 template<>
 class allocator<void> {
 public:
   typedef size_t size_type;
   typedef ptrdiff_t difference_type;
   typedef void* pointer;
   typedef const void* const_pointer;
   typedef void value_type;
 
   template <class _Tp1> struct rebind {
     typedef allocator<_Tp1> other;
   };
 };
 
 
 template <class _T1, class _T2>
 inline bool operator==(const allocator<_T1>&, const allocator<_T2>&)
 {
   return true;
 }
 
 template <class _T1, class _T2>
 inline bool operator!=(const allocator<_T1>&, const allocator<_T2>&)
 {
   return false;
 }
 # 695 "/usr/include/c++/3.2/bits/stl_alloc.h" 3
 template <class _Tp, class _Alloc>
 struct __allocator
 {
   _Alloc __underlying_alloc;
 
   typedef size_t size_type;
   typedef ptrdiff_t difference_type;
   typedef _Tp* pointer;
   typedef const _Tp* const_pointer;
   typedef _Tp& reference;
   typedef const _Tp& const_reference;
   typedef _Tp value_type;
 
   template <class _Tp1> struct rebind {
     typedef __allocator<_Tp1, _Alloc> other;
   };
 
   __allocator() throw() {}
   __allocator(const __allocator& __a) throw()
     : __underlying_alloc(__a.__underlying_alloc) {}
   template <class _Tp1>
   __allocator(const __allocator<_Tp1, _Alloc>& __a) throw()
     : __underlying_alloc(__a.__underlying_alloc) {}
   ~__allocator() throw() {}
 
   pointer address(reference __x) const { return &__x; }
   const_pointer address(const_reference __x) const { return &__x; }
 
 
   _Tp* allocate(size_type __n, const void* = 0) {
     return __n != 0
         ? static_cast<_Tp*>(__underlying_alloc.allocate(__n * sizeof(_Tp)))
         : 0;
   }
 
 
   void deallocate(pointer __p, size_type __n)
     { __underlying_alloc.deallocate(__p, __n * sizeof(_Tp)); }
 
   size_type max_size() const throw()
     { return size_t(-1) / sizeof(_Tp); }
 
   void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); }
   void destroy(pointer __p) { __p->~_Tp(); }
 };
 
 template <class _Alloc>
 class __allocator<void, _Alloc> {
   typedef size_t size_type;
   typedef ptrdiff_t difference_type;
   typedef void* pointer;
   typedef const void* const_pointer;
   typedef void value_type;
 
   template <class _Tp1> struct rebind {
     typedef __allocator<_Tp1, _Alloc> other;
   };
 };
 
 template <class _Tp, class _Alloc>
 inline bool operator==(const __allocator<_Tp, _Alloc>& __a1,
                        const __allocator<_Tp, _Alloc>& __a2)
 {
   return __a1.__underlying_alloc == __a2.__underlying_alloc;
 }
 
 template <class _Tp, class _Alloc>
 inline bool operator!=(const __allocator<_Tp, _Alloc>& __a1,
                        const __allocator<_Tp, _Alloc>& __a2)
 {
   return __a1.__underlying_alloc != __a2.__underlying_alloc;
 }
 
 
 
 
 
 
 
 template <int inst>
 inline bool operator==(const __malloc_alloc_template<inst>&,
                        const __malloc_alloc_template<inst>&)
 {
   return true;
 }
 
 template <int __inst>
 inline bool operator!=(const __malloc_alloc_template<__inst>&,
                        const __malloc_alloc_template<__inst>&)
 {
   return false;
 }
 
 template <class _Alloc>
 inline bool operator==(const __debug_alloc<_Alloc>&,
                        const __debug_alloc<_Alloc>&) {
   return true;
 }
 
 template <class _Alloc>
 inline bool operator!=(const __debug_alloc<_Alloc>&,
                        const __debug_alloc<_Alloc>&) {
   return false;
 }
 # 840 "/usr/include/c++/3.2/bits/stl_alloc.h" 3
 template <class _Tp, class _Allocator>
 struct _Alloc_traits
 {
   static const bool _S_instanceless = false;
   typedef typename _Allocator::template rebind<_Tp>::other allocator_type;
 };
 
 template <class _Tp, class _Allocator>
 const bool _Alloc_traits<_Tp, _Allocator>::_S_instanceless;
 
 
 template <class _Tp, class _Tp1>
 struct _Alloc_traits<_Tp, allocator<_Tp1> >
 {
   static const bool _S_instanceless = true;
   typedef __simple_alloc<_Tp, __alloc> _Alloc_type;
   typedef allocator<_Tp> allocator_type;
 };
 
 
 
 
 template <class _Tp, int __inst>
 struct _Alloc_traits<_Tp, __malloc_alloc_template<__inst> >
 {
   static const bool _S_instanceless = true;
   typedef __simple_alloc<_Tp, __malloc_alloc_template<__inst> > _Alloc_type;
   typedef __allocator<_Tp, __malloc_alloc_template<__inst> > allocator_type;
 };
 
 
 template <class _Tp, bool __threads, int __inst>
 struct _Alloc_traits<_Tp, __default_alloc_template<__threads, __inst> >
 {
   static const bool _S_instanceless = true;
   typedef __simple_alloc<_Tp, __default_alloc_template<__threads, __inst> >
           _Alloc_type;
   typedef __allocator<_Tp, __default_alloc_template<__threads, __inst> >
           allocator_type;
 };
 
 
 template <class _Tp, class _Alloc>
 struct _Alloc_traits<_Tp, __debug_alloc<_Alloc> >
 {
   static const bool _S_instanceless = true;
   typedef __simple_alloc<_Tp, __debug_alloc<_Alloc> > _Alloc_type;
   typedef __allocator<_Tp, __debug_alloc<_Alloc> > allocator_type;
 };
 
 
 
 
 template <class _Tp, class _Tp1, int __inst>
 struct _Alloc_traits<_Tp,
                      __allocator<_Tp1, __malloc_alloc_template<__inst> > >
 {
   static const bool _S_instanceless = true;
   typedef __simple_alloc<_Tp, __malloc_alloc_template<__inst> > _Alloc_type;
   typedef __allocator<_Tp, __malloc_alloc_template<__inst> > allocator_type;
 };
 
 
 template <class _Tp, class _Tp1, bool __thr, int __inst>
 struct _Alloc_traits<_Tp,
                       __allocator<_Tp1,
                                   __default_alloc_template<__thr, __inst> > >
 {
   static const bool _S_instanceless = true;
   typedef __simple_alloc<_Tp, __default_alloc_template<__thr,__inst> >
           _Alloc_type;
   typedef __allocator<_Tp, __default_alloc_template<__thr,__inst> >
           allocator_type;
 };
 
 
 template <class _Tp, class _Tp1, class _Alloc>
 struct _Alloc_traits<_Tp, __allocator<_Tp1, __debug_alloc<_Alloc> > >
 {
   static const bool _S_instanceless = true;
   typedef __simple_alloc<_Tp, __debug_alloc<_Alloc> > _Alloc_type;
   typedef __allocator<_Tp, __debug_alloc<_Alloc> > allocator_type;
 };
 
 
 
 
 
   extern template class allocator<char>;
   extern template class allocator<wchar_t>;
 
 
 
   extern template class __default_alloc_template<true, 0>;
 
 }
 # 56 "/usr/include/c++/3.2/memory" 2 3
 # 1 "/usr/include/c++/3.2/bits/stl_construct.h" 1 3
 # 67 "/usr/include/c++/3.2/bits/stl_construct.h" 3
 namespace std
 {
 
 
 
 
 
 
   template <class _T1, class _T2>
     inline void
     _Construct(_T1* __p, const _T2& __value)
     { new (static_cast<void*>(__p)) _T1(__value); }
 
 
 
 
 
 
 
   template <class _T1>
     inline void
     _Construct(_T1* __p)
     { new (static_cast<void*>(__p)) _T1(); }
 # 98 "/usr/include/c++/3.2/bits/stl_construct.h" 3
   template <class _ForwardIterator>
     inline void
     __destroy_aux(_ForwardIterator __first, _ForwardIterator __last, __false_type)
     { for ( ; __first != __last; ++__first) _Destroy(&*__first); }
 # 112 "/usr/include/c++/3.2/bits/stl_construct.h" 3
   template <class _ForwardIterator>
     inline void
     __destroy_aux(_ForwardIterator, _ForwardIterator, __true_type)
     { }
 
 
 
 
 
 
   template <class _Tp>
     inline void
     _Destroy(_Tp* __pointer)
     { __pointer->~_Tp(); }
 # 134 "/usr/include/c++/3.2/bits/stl_construct.h" 3
   template <class _ForwardIterator>
     inline void
     _Destroy(_ForwardIterator __first, _ForwardIterator __last)
     {
       typedef typename iterator_traits<_ForwardIterator>::value_type
                        _Value_type;
       typedef typename __type_traits<_Value_type>::has_trivial_destructor
                        _Has_trivial_destructor;
 
       __destroy_aux(__first, __last, _Has_trivial_destructor());
     }
 }
 # 57 "/usr/include/c++/3.2/memory" 2 3
 
 # 1 "/usr/include/c++/3.2/bits/stl_uninitialized.h" 1 3
 # 66 "/usr/include/c++/3.2/bits/stl_uninitialized.h" 3
 namespace std
 {
 
 
 
   template<typename _InputIter, typename _ForwardIter>
     inline _ForwardIter
     __uninitialized_copy_aux(_InputIter __first, _InputIter __last,
                              _ForwardIter __result,
                              __true_type)
     { return copy(__first, __last, __result); }
 
   template<typename _InputIter, typename _ForwardIter>
     _ForwardIter
     __uninitialized_copy_aux(_InputIter __first, _InputIter __last,
                              _ForwardIter __result,
                              __false_type)
     {
       _ForwardIter __cur = __result;
       try {
         for ( ; __first != __last; ++__first, ++__cur)
           _Construct(&*__cur, *__first);
         return __cur;
       }
       catch(...)
         {
           _Destroy(__result, __cur);
           throw;
         }
     }
 # 106 "/usr/include/c++/3.2/bits/stl_uninitialized.h" 3
   template<typename _InputIter, typename _ForwardIter>
     inline _ForwardIter
     uninitialized_copy(_InputIter __first, _InputIter __last, _ForwardIter __result)
     {
       typedef typename iterator_traits<_ForwardIter>::value_type _ValueType;
       typedef typename __type_traits<_ValueType>::is_POD_type _Is_POD;
       return __uninitialized_copy_aux(__first, __last, __result, _Is_POD());
     }
 
   inline char*
   uninitialized_copy(const char* __first, const char* __last, char* __result)
   {
     memmove(__result, __first, __last - __first);
     return __result + (__last - __first);
   }
 
   inline wchar_t*
   uninitialized_copy(const wchar_t* __first, const wchar_t* __last,
                      wchar_t* __result)
   {
     memmove(__result, __first, sizeof(wchar_t) * (__last - __first));
     return __result + (__last - __first);
   }
 
 
 
   template<typename _ForwardIter, typename _Tp>
     inline void
     __uninitialized_fill_aux(_ForwardIter __first, _ForwardIter __last,
                              const _Tp& __x, __true_type)
     { fill(__first, __last, __x); }
 
   template<typename _ForwardIter, typename _Tp>
     void
     __uninitialized_fill_aux(_ForwardIter __first, _ForwardIter __last,
                              const _Tp& __x, __false_type)
     {
       _ForwardIter __cur = __first;
       try {
         for ( ; __cur != __last; ++__cur)
           _Construct(&*__cur, __x);
       }
       catch(...)
         {
           _Destroy(__first, __cur);
           throw;
         }
     }
 # 164 "/usr/include/c++/3.2/bits/stl_uninitialized.h" 3
   template<typename _ForwardIter, typename _Tp>
     inline void
     uninitialized_fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __x)
     {
       typedef typename iterator_traits<_ForwardIter>::value_type _ValueType;
       typedef typename __type_traits<_ValueType>::is_POD_type _Is_POD;
       __uninitialized_fill_aux(__first, __last, __x, _Is_POD());
     }
 
 
 
   template<typename _ForwardIter, typename _Size, typename _Tp>
     inline _ForwardIter
     __uninitialized_fill_n_aux(_ForwardIter __first, _Size __n,
                                const _Tp& __x, __true_type)
     {
       return fill_n(__first, __n, __x);
     }
 
   template<typename _ForwardIter, typename _Size, typename _Tp>
     _ForwardIter
     __uninitialized_fill_n_aux(_ForwardIter __first, _Size __n,
                                const _Tp& __x, __false_type)
     {
       _ForwardIter __cur = __first;
       try {
         for ( ; __n > 0; --__n, ++__cur)
           _Construct(&*__cur, __x);
         return __cur;
       }
       catch(...)
         {
           _Destroy(__first, __cur);
           throw;
         }
     }
 # 210 "/usr/include/c++/3.2/bits/stl_uninitialized.h" 3
   template<typename _ForwardIter, typename _Size, typename _Tp>
     inline _ForwardIter
     uninitialized_fill_n(_ForwardIter __first, _Size __n, const _Tp& __x)
     {
       typedef typename iterator_traits<_ForwardIter>::value_type _ValueType;
       typedef typename __type_traits<_ValueType>::is_POD_type _Is_POD;
       return __uninitialized_fill_n_aux(__first, __n, __x, _Is_POD());
     }
 # 227 "/usr/include/c++/3.2/bits/stl_uninitialized.h" 3
   template<typename _InputIter1, typename _InputIter2, typename _ForwardIter>
     inline _ForwardIter
     __uninitialized_copy_copy(_InputIter1 __first1, _InputIter1 __last1,
                               _InputIter2 __first2, _InputIter2 __last2,
                               _ForwardIter __result)
     {
       _ForwardIter __mid = uninitialized_copy(__first1, __last1, __result);
       try {
         return uninitialized_copy(__first2, __last2, __mid);
       }
       catch(...)
         {
           _Destroy(__result, __mid);
           throw;
         }
     }
 
 
 
 
   template<typename _ForwardIter, typename _Tp, typename _InputIter>
     inline _ForwardIter
     __uninitialized_fill_copy(_ForwardIter __result, _ForwardIter __mid,
                               const _Tp& __x,
                               _InputIter __first, _InputIter __last)
     {
       uninitialized_fill(__result, __mid, __x);
       try {
         return uninitialized_copy(__first, __last, __mid);
       }
       catch(...)
         {
           _Destroy(__result, __mid);
           throw;
         }
     }
 
 
 
 
   template<typename _InputIter, typename _ForwardIter, typename _Tp>
     inline void
     __uninitialized_copy_fill(_InputIter __first1, _InputIter __last1,
                               _ForwardIter __first2, _ForwardIter __last2,
                               const _Tp& __x)
     {
       _ForwardIter __mid2 = uninitialized_copy(__first1, __last1, __first2);
       try {
         uninitialized_fill(__mid2, __last2, __x);
       }
       catch(...)
         {
           _Destroy(__first2, __mid2);
           throw;
         }
     }
 
 }
 # 59 "/usr/include/c++/3.2/memory" 2 3
 # 1 "/usr/include/c++/3.2/bits/stl_raw_storage_iter.h" 1 3
 # 64 "/usr/include/c++/3.2/bits/stl_raw_storage_iter.h" 3
 namespace std
 {
 
 
 
 
   template <class _ForwardIterator, class _Tp>
   class raw_storage_iterator
     : public iterator<output_iterator_tag, void, void, void, void>
     {
     protected:
       _ForwardIterator _M_iter;
 
     public:
       explicit
       raw_storage_iterator(_ForwardIterator __x) : _M_iter(__x) {}
 
       raw_storage_iterator&
       operator*() { return *this; }
 
       raw_storage_iterator&
       operator=(const _Tp& __element)
       {
         _Construct(&*_M_iter, __element);
         return *this;
       }
 
       raw_storage_iterator<_ForwardIterator, _Tp>&
       operator++()
       {
         ++_M_iter;
         return *this;
       }
 
       raw_storage_iterator<_ForwardIterator, _Tp>
       operator++(int)
       {
         raw_storage_iterator<_ForwardIterator, _Tp> __tmp = *this;
         ++_M_iter;
         return __tmp;
       }
     };
 }
 # 60 "/usr/include/c++/3.2/memory" 2 3
 
 
 
 
 namespace std
 {
 # 74 "/usr/include/c++/3.2/memory" 3
 template <typename _Tp>
 pair<_Tp*, ptrdiff_t>
 __get_temporary_buffer(ptrdiff_t __len, _Tp*)
 {
   if (__len > ptrdiff_t(2147483647 / sizeof(_Tp)))
     __len = 2147483647 / sizeof(_Tp);
 
   while (__len > 0) {
     _Tp* __tmp = (_Tp*) std::malloc((std::size_t)__len * sizeof(_Tp));
     if (__tmp != 0)
       return pair<_Tp*, ptrdiff_t>(__tmp, __len);
     __len /= 2;
   }
 
   return pair<_Tp*, ptrdiff_t>((_Tp*)0, 0);
 }
 # 106 "/usr/include/c++/3.2/memory" 3
 template<typename _Tp>
   inline pair<_Tp*,ptrdiff_t>
   get_temporary_buffer(ptrdiff_t __len)
   {
     return __get_temporary_buffer(__len, (_Tp*) 0);
   }
 # 120 "/usr/include/c++/3.2/memory" 3
 template<typename _Tp>
   void
   return_temporary_buffer(_Tp* __p)
   {
     std::free(__p);
   }
 # 135 "/usr/include/c++/3.2/memory" 3
 template<typename _Tp1>
   struct auto_ptr_ref
 {
    _Tp1* _M_ptr;
 
    explicit
    auto_ptr_ref(_Tp1* __p)
    : _M_ptr(__p) {}
 };
 # 175 "/usr/include/c++/3.2/memory" 3
 template<typename _Tp>
   class auto_ptr
 {
 private:
   _Tp* _M_ptr;
 
 public:
 
   typedef _Tp element_type;
 
 
 
 
 
 
 
   explicit
   auto_ptr(element_type* __p = 0) throw()
   : _M_ptr(__p) { }
 # 202 "/usr/include/c++/3.2/memory" 3
   auto_ptr(auto_ptr& __a) throw()
   : _M_ptr(__a.release()) { }
 # 214 "/usr/include/c++/3.2/memory" 3
   template<typename _Tp1>
     auto_ptr(auto_ptr<_Tp1>& __a) throw()
     : _M_ptr(__a.release()) { }
 # 226 "/usr/include/c++/3.2/memory" 3
   auto_ptr&
   operator=(auto_ptr& __a) throw()
     {
       reset(__a.release());
       return *this;
     }
 # 243 "/usr/include/c++/3.2/memory" 3
   template <typename _Tp1>
     auto_ptr&
     operator=(auto_ptr<_Tp1>& __a) throw()
     {
       reset(__a.release());
       return *this;
     }
 # 263 "/usr/include/c++/3.2/memory" 3
   ~auto_ptr() { delete _M_ptr; }
 # 273 "/usr/include/c++/3.2/memory" 3
   element_type&
   operator*() const throw() { return *_M_ptr; }
 
 
 
 
 
 
 
   element_type*
   operator->() const throw() { return _M_ptr; }
 # 295 "/usr/include/c++/3.2/memory" 3
   element_type*
   get() const throw() { return _M_ptr; }
 # 309 "/usr/include/c++/3.2/memory" 3
   element_type*
   release() throw()
     {
       element_type* __tmp = _M_ptr;
       _M_ptr = 0;
       return __tmp;
     }
 # 324 "/usr/include/c++/3.2/memory" 3
   void
   reset(element_type* __p = 0) throw()
     {
       if (__p != _M_ptr)
         {
           delete _M_ptr;
           _M_ptr = __p;
         }
     }
 # 345 "/usr/include/c++/3.2/memory" 3
   auto_ptr(auto_ptr_ref<element_type> __ref) throw()
     : _M_ptr(__ref._M_ptr) {}
 
   auto_ptr&
   operator=(auto_ptr_ref<element_type> __ref) throw()
     {
       if (__ref._M_ptr != this->get())
         {
           delete _M_ptr;
           _M_ptr = __ref._M_ptr;
         }
       return *this;
     }
 
   template<typename _Tp1>
     operator auto_ptr_ref<_Tp1>() throw()
       { return auto_ptr_ref<_Tp1>(this->release()); }
 
   template<typename _Tp1>
     operator auto_ptr<_Tp1>() throw()
       { return auto_ptr<_Tp1>(this->release()); }
 
 };
 
 }
 # 49 "/usr/include/c++/3.2/string" 2 3
 
 
 
 # 1 "/usr/include/c++/3.2/bits/stl_function.h" 1 3
 # 64 "/usr/include/c++/3.2/bits/stl_function.h" 3
 namespace std
 {
 # 101 "/usr/include/c++/3.2/bits/stl_function.h" 3
 template <class _Arg, class _Result>
 struct unary_function {
   typedef _Arg argument_type;
   typedef _Result result_type;
 };
 
 
 
 
 template <class _Arg1, class _Arg2, class _Result>
 struct binary_function {
   typedef _Arg1 first_argument_type;
   typedef _Arg2 second_argument_type;
   typedef _Result result_type;
 };
 # 127 "/usr/include/c++/3.2/bits/stl_function.h" 3
 template <class _Tp>
 struct plus : public binary_function<_Tp,_Tp,_Tp> {
   _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x + __y; }
 };
 
 
 template <class _Tp>
 struct minus : public binary_function<_Tp,_Tp,_Tp> {
   _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x - __y; }
 };
 
 
 template <class _Tp>
 struct multiplies : public binary_function<_Tp,_Tp,_Tp> {
   _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x * __y; }
 };
 
 
 template <class _Tp>
 struct divides : public binary_function<_Tp,_Tp,_Tp> {
   _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x / __y; }
 };
 
 
 template <class _Tp>
 struct modulus : public binary_function<_Tp,_Tp,_Tp>
 {
   _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x % __y; }
 };
 
 
 template <class _Tp>
 struct negate : public unary_function<_Tp,_Tp>
 {
   _Tp operator()(const _Tp& __x) const { return -__x; }
 };
 # 173 "/usr/include/c++/3.2/bits/stl_function.h" 3
 template <class _Tp>
 struct equal_to : public binary_function<_Tp,_Tp,bool>
 {
   bool operator()(const _Tp& __x, const _Tp& __y) const { return __x == __y; }
 };
 
 
 template <class _Tp>
 struct not_equal_to : public binary_function<_Tp,_Tp,bool>
 {
   bool operator()(const _Tp& __x, const _Tp& __y) const { return __x != __y; }
 };
 
 
 template <class _Tp>
 struct greater : public binary_function<_Tp,_Tp,bool>
 {
   bool operator()(const _Tp& __x, const _Tp& __y) const { return __x > __y; }
 };
 
 
 template <class _Tp>
 struct less : public binary_function<_Tp,_Tp,bool>
 {
   bool operator()(const _Tp& __x, const _Tp& __y) const { return __x < __y; }
 };
 
 
 template <class _Tp>
 struct greater_equal : public binary_function<_Tp,_Tp,bool>
 {
   bool operator()(const _Tp& __x, const _Tp& __y) const { return __x >= __y; }
 };
 
 
 template <class _Tp>
 struct less_equal : public binary_function<_Tp,_Tp,bool>
 {
   bool operator()(const _Tp& __x, const _Tp& __y) const { return __x <= __y; }
 };
 # 222 "/usr/include/c++/3.2/bits/stl_function.h" 3
 template <class _Tp>
 struct logical_and : public binary_function<_Tp,_Tp,bool>
 {
   bool operator()(const _Tp& __x, const _Tp& __y) const { return __x && __y; }
 };
 
 
 template <class _Tp>
 struct logical_or : public binary_function<_Tp,_Tp,bool>
 {
   bool operator()(const _Tp& __x, const _Tp& __y) const { return __x || __y; }
 };
 
 
 template <class _Tp>
 struct logical_not : public unary_function<_Tp,bool>
 {
   bool operator()(const _Tp& __x) const { return !__x; }
 };
 # 271 "/usr/include/c++/3.2/bits/stl_function.h" 3
 template <class _Predicate>
 class unary_negate
   : public unary_function<typename _Predicate::argument_type, bool> {
 protected:
   _Predicate _M_pred;
 public:
   explicit unary_negate(const _Predicate& __x) : _M_pred(__x) {}
   bool operator()(const typename _Predicate::argument_type& __x) const {
     return !_M_pred(__x);
   }
 };
 
 
 template <class _Predicate>
 inline unary_negate<_Predicate>
 not1(const _Predicate& __pred)
 {
   return unary_negate<_Predicate>(__pred);
 }
 
 
 template <class _Predicate>
 class binary_negate
   : public binary_function<typename _Predicate::first_argument_type,
                            typename _Predicate::second_argument_type,
                            bool> {
 protected:
   _Predicate _M_pred;
 public:
   explicit binary_negate(const _Predicate& __x) : _M_pred(__x) {}
   bool operator()(const typename _Predicate::first_argument_type& __x,
                   const typename _Predicate::second_argument_type& __y) const
   {
     return !_M_pred(__x, __y);
   }
 };
 
 
 template <class _Predicate>
 inline binary_negate<_Predicate>
 not2(const _Predicate& __pred)
 {
   return binary_negate<_Predicate>(__pred);
 }
 # 349 "/usr/include/c++/3.2/bits/stl_function.h" 3
 template <class _Operation>
 class binder1st
   : public unary_function<typename _Operation::second_argument_type,
                           typename _Operation::result_type> {
 protected:
   _Operation op;
   typename _Operation::first_argument_type value;
 public:
   binder1st(const _Operation& __x,
             const typename _Operation::first_argument_type& __y)
       : op(__x), value(__y) {}
   typename _Operation::result_type
   operator()(const typename _Operation::second_argument_type& __x) const {
     return op(value, __x);
   }
 
 
   typename _Operation::result_type
   operator()(typename _Operation::second_argument_type& __x) const {
     return op(value, __x);
   }
 
 };
 
 
 template <class _Operation, class _Tp>
 inline binder1st<_Operation>
 bind1st(const _Operation& __fn, const _Tp& __x)
 {
   typedef typename _Operation::first_argument_type _Arg1_type;
   return binder1st<_Operation>(__fn, _Arg1_type(__x));
 }
 
 
 template <class _Operation>
 class binder2nd
   : public unary_function<typename _Operation::first_argument_type,
                           typename _Operation::result_type> {
 protected:
   _Operation op;
   typename _Operation::second_argument_type value;
 public:
   binder2nd(const _Operation& __x,
             const typename _Operation::second_argument_type& __y)
       : op(__x), value(__y) {}
   typename _Operation::result_type
   operator()(const typename _Operation::first_argument_type& __x) const {
     return op(__x, value);
   }
 
 
   typename _Operation::result_type
   operator()(typename _Operation::first_argument_type& __x) const {
     return op(__x, value);
   }
 
 };
 
 
 template <class _Operation, class _Tp>
 inline binder2nd<_Operation>
 bind2nd(const _Operation& __fn, const _Tp& __x)
 {
   typedef typename _Operation::second_argument_type _Arg2_type;
   return binder2nd<_Operation>(__fn, _Arg2_type(__x));
 }
 # 438 "/usr/include/c++/3.2/bits/stl_function.h" 3
 template <class _Arg, class _Result>
 class pointer_to_unary_function : public unary_function<_Arg, _Result> {
 protected:
   _Result (*_M_ptr)(_Arg);
 public:
   pointer_to_unary_function() {}
   explicit pointer_to_unary_function(_Result (*__x)(_Arg)) : _M_ptr(__x) {}
   _Result operator()(_Arg __x) const { return _M_ptr(__x); }
 };
 
 
 template <class _Arg, class _Result>
 inline pointer_to_unary_function<_Arg, _Result> ptr_fun(_Result (*__x)(_Arg))
 {
   return pointer_to_unary_function<_Arg, _Result>(__x);
 }
 
 
 template <class _Arg1, class _Arg2, class _Result>
 class pointer_to_binary_function :
   public binary_function<_Arg1,_Arg2,_Result> {
 protected:
     _Result (*_M_ptr)(_Arg1, _Arg2);
 public:
     pointer_to_binary_function() {}
     explicit pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2))
       : _M_ptr(__x) {}
     _Result operator()(_Arg1 __x, _Arg2 __y) const {
       return _M_ptr(__x, __y);
     }
 };
 
 
 template <class _Arg1, class _Arg2, class _Result>
 inline pointer_to_binary_function<_Arg1,_Arg2,_Result>
 ptr_fun(_Result (*__x)(_Arg1, _Arg2)) {
   return pointer_to_binary_function<_Arg1,_Arg2,_Result>(__x);
 }
 
 
 template <class _Tp>
 struct _Identity : public unary_function<_Tp,_Tp> {
   _Tp& operator()(_Tp& __x) const { return __x; }
   const _Tp& operator()(const _Tp& __x) const { return __x; }
 };
 
 template <class _Pair>
 struct _Select1st : public unary_function<_Pair, typename _Pair::first_type> {
   typename _Pair::first_type& operator()(_Pair& __x) const {
     return __x.first;
   }
   const typename _Pair::first_type& operator()(const _Pair& __x) const {
     return __x.first;
   }
 };
 
 template <class _Pair>
 struct _Select2nd : public unary_function<_Pair, typename _Pair::second_type>
 {
   typename _Pair::second_type& operator()(_Pair& __x) const {
     return __x.second;
   }
   const typename _Pair::second_type& operator()(const _Pair& __x) const {
     return __x.second;
   }
 };
 # 528 "/usr/include/c++/3.2/bits/stl_function.h" 3
 template <class _Ret, class _Tp>
 class mem_fun_t : public unary_function<_Tp*,_Ret> {
 public:
   explicit mem_fun_t(_Ret (_Tp::*__pf)()) : _M_f(__pf) {}
   _Ret operator()(_Tp* __p) const { return (__p->*_M_f)(); }
 private:
   _Ret (_Tp::*_M_f)();
 };
 
 
 template <class _Ret, class _Tp>
 class const_mem_fun_t : public unary_function<const _Tp*,_Ret> {
 public:
   explicit const_mem_fun_t(_Ret (_Tp::*__pf)() const) : _M_f(__pf) {}
   _Ret operator()(const _Tp* __p) const { return (__p->*_M_f)(); }
 private:
   _Ret (_Tp::*_M_f)() const;
 };
 
 
 template <class _Ret, class _Tp>
 class mem_fun_ref_t : public unary_function<_Tp,_Ret> {
 public:
   explicit mem_fun_ref_t(_Ret (_Tp::*__pf)()) : _M_f(__pf) {}
   _Ret operator()(_Tp& __r) const { return (__r.*_M_f)(); }
 private:
   _Ret (_Tp::*_M_f)();
 };
 
 
 template <class _Ret, class _Tp>
 class const_mem_fun_ref_t : public unary_function<_Tp,_Ret> {
 public:
   explicit const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const) : _M_f(__pf) {}
   _Ret operator()(const _Tp& __r) const { return (__r.*_M_f)(); }
 private:
   _Ret (_Tp::*_M_f)() const;
 };
 
 
 template <class _Ret, class _Tp, class _Arg>
 class mem_fun1_t : public binary_function<_Tp*,_Arg,_Ret> {
 public:
   explicit mem_fun1_t(_Ret (_Tp::*__pf)(_Arg)) : _M_f(__pf) {}
   _Ret operator()(_Tp* __p, _Arg __x) const { return (__p->*_M_f)(__x); }
 private:
   _Ret (_Tp::*_M_f)(_Arg);
 };
 
 
 template <class _Ret, class _Tp, class _Arg>
 class const_mem_fun1_t : public binary_function<const _Tp*,_Arg,_Ret> {
 public:
   explicit const_mem_fun1_t(_Ret (_Tp::*__pf)(_Arg) const) : _M_f(__pf) {}
   _Ret operator()(const _Tp* __p, _Arg __x) const
     { return (__p->*_M_f)(__x); }
 private:
   _Ret (_Tp::*_M_f)(_Arg) const;
 };
 
 
 template <class _Ret, class _Tp, class _Arg>
 class mem_fun1_ref_t : public binary_function<_Tp,_Arg,_Ret> {
 public:
   explicit mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg)) : _M_f(__pf) {}
   _Ret operator()(_Tp& __r, _Arg __x) const { return (__r.*_M_f)(__x); }
 private:
   _Ret (_Tp::*_M_f)(_Arg);
 };
 
 
 template <class _Ret, class _Tp, class _Arg>
 class const_mem_fun1_ref_t : public binary_function<_Tp,_Arg,_Ret> {
 public:
   explicit const_mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg) const) : _M_f(__pf) {}
   _Ret operator()(const _Tp& __r, _Arg __x) const { return (__r.*_M_f)(__x); }
 private:
   _Ret (_Tp::*_M_f)(_Arg) const;
 };
 
 
 template <class _Tp>
 class mem_fun_t<void, _Tp> : public unary_function<_Tp*,void> {
 public:
   explicit mem_fun_t(void (_Tp::*__pf)()) : _M_f(__pf) {}
   void operator()(_Tp* __p) const { (__p->*_M_f)(); }
 private:
   void (_Tp::*_M_f)();
 };
 
 
 template <class _Tp>
 class const_mem_fun_t<void, _Tp> : public unary_function<const _Tp*,void> {
 public:
   explicit const_mem_fun_t(void (_Tp::*__pf)() const) : _M_f(__pf) {}
   void operator()(const _Tp* __p) const { (__p->*_M_f)(); }
 private:
   void (_Tp::*_M_f)() const;
 };
 
 
 template <class _Tp>
 class mem_fun_ref_t<void, _Tp> : public unary_function<_Tp,void> {
 public:
   explicit mem_fun_ref_t(void (_Tp::*__pf)()) : _M_f(__pf) {}
   void operator()(_Tp& __r) const { (__r.*_M_f)(); }
 private:
   void (_Tp::*_M_f)();
 };
 
 
 template <class _Tp>
 class const_mem_fun_ref_t<void, _Tp> : public unary_function<_Tp,void> {
 public:
   explicit const_mem_fun_ref_t(void (_Tp::*__pf)() const) : _M_f(__pf) {}
   void operator()(const _Tp& __r) const { (__r.*_M_f)(); }
 private:
   void (_Tp::*_M_f)() const;
 };
 
 
 template <class _Tp, class _Arg>
 class mem_fun1_t<void, _Tp, _Arg> : public binary_function<_Tp*,_Arg,void> {
 public:
   explicit mem_fun1_t(void (_Tp::*__pf)(_Arg)) : _M_f(__pf) {}
   void operator()(_Tp* __p, _Arg __x) const { (__p->*_M_f)(__x); }
 private:
   void (_Tp::*_M_f)(_Arg);
 };
 
 
 template <class _Tp, class _Arg>
 class const_mem_fun1_t<void, _Tp, _Arg>
   : public binary_function<const _Tp*,_Arg,void> {
 public:
   explicit const_mem_fun1_t(void (_Tp::*__pf)(_Arg) const) : _M_f(__pf) {}
   void operator()(const _Tp* __p, _Arg __x) const { (__p->*_M_f)(__x); }
 private:
   void (_Tp::*_M_f)(_Arg) const;
 };
 
 
 template <class _Tp, class _Arg>
 class mem_fun1_ref_t<void, _Tp, _Arg>
   : public binary_function<_Tp,_Arg,void> {
 public:
   explicit mem_fun1_ref_t(void (_Tp::*__pf)(_Arg)) : _M_f(__pf) {}
   void operator()(_Tp& __r, _Arg __x) const { (__r.*_M_f)(__x); }
 private:
   void (_Tp::*_M_f)(_Arg);
 };
 
 
 template <class _Tp, class _Arg>
 class const_mem_fun1_ref_t<void, _Tp, _Arg>
   : public binary_function<_Tp,_Arg,void> {
 public:
   explicit const_mem_fun1_ref_t(void (_Tp::*__pf)(_Arg) const) : _M_f(__pf) {}
   void operator()(const _Tp& __r, _Arg __x) const { (__r.*_M_f)(__x); }
 private:
   void (_Tp::*_M_f)(_Arg) const;
 };
 
 
 
 
 
 template <class _Ret, class _Tp>
 inline mem_fun_t<_Ret,_Tp> mem_fun(_Ret (_Tp::*__f)())
   { return mem_fun_t<_Ret,_Tp>(__f); }
 
 template <class _Ret, class _Tp>
 inline const_mem_fun_t<_Ret,_Tp> mem_fun(_Ret (_Tp::*__f)() const)
   { return const_mem_fun_t<_Ret,_Tp>(__f); }
 
 template <class _Ret, class _Tp>
 inline mem_fun_ref_t<_Ret,_Tp> mem_fun_ref(_Ret (_Tp::*__f)())
   { return mem_fun_ref_t<_Ret,_Tp>(__f); }
 
 template <class _Ret, class _Tp>
 inline const_mem_fun_ref_t<_Ret,_Tp> mem_fun_ref(_Ret (_Tp::*__f)() const)
   { return const_mem_fun_ref_t<_Ret,_Tp>(__f); }
 
 template <class _Ret, class _Tp, class _Arg>
 inline mem_fun1_t<_Ret,_Tp,_Arg> mem_fun(_Ret (_Tp::*__f)(_Arg))
   { return mem_fun1_t<_Ret,_Tp,_Arg>(__f); }
 
 template <class _Ret, class _Tp, class _Arg>
 inline const_mem_fun1_t<_Ret,_Tp,_Arg> mem_fun(_Ret (_Tp::*__f)(_Arg) const)
   { return const_mem_fun1_t<_Ret,_Tp,_Arg>(__f); }
 
 template <class _Ret, class _Tp, class _Arg>
 inline mem_fun1_ref_t<_Ret,_Tp,_Arg> mem_fun_ref(_Ret (_Tp::*__f)(_Arg))
   { return mem_fun1_ref_t<_Ret,_Tp,_Arg>(__f); }
 
 template <class _Ret, class _Tp, class _Arg>
 inline const_mem_fun1_ref_t<_Ret,_Tp,_Arg>
 mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const)
   { return const_mem_fun1_ref_t<_Ret,_Tp,_Arg>(__f); }
 
 
 
 }
 # 53 "/usr/include/c++/3.2/string" 2 3
 # 1 "/usr/include/c++/3.2/bits/basic_string.h" 1 3
 # 44 "/usr/include/c++/3.2/bits/basic_string.h" 3
 
 # 1 "/usr/include/c++/3.2/i386-linux/bits/atomicity.h" 1 3
 # 33 "/usr/include/c++/3.2/i386-linux/bits/atomicity.h" 3
 typedef int _Atomic_word;
 
 static inline _Atomic_word
 __attribute__ ((__unused__))
 __exchange_and_add (volatile _Atomic_word *__mem, int __val)
 {
   register _Atomic_word __result;
   __asm__ __volatile__ ("lock; xaddl %0,%2"
                         : "=r" (__result)
                         : "0" (__val), "m" (*__mem)
                         : "memory");
   return __result;
 }
 
 static inline void
 __attribute__ ((__unused__))
 __atomic_add (volatile _Atomic_word* __mem, int __val)
 {
   __asm__ __volatile__ ("lock; addl %0,%1"
                         : : "ir" (__val), "m" (*__mem) : "memory");
 }
 # 46 "/usr/include/c++/3.2/bits/basic_string.h" 2 3
 
 namespace std
 {
 # 88 "/usr/include/c++/3.2/bits/basic_string.h" 3
   template<typename _CharT, typename _Traits, typename _Alloc>
     class basic_string
     {
 
     public:
       typedef _Traits traits_type;
       typedef typename _Traits::char_type value_type;
       typedef _Alloc allocator_type;
       typedef typename _Alloc::size_type size_type;
       typedef typename _Alloc::difference_type difference_type;
       typedef typename _Alloc::reference reference;
       typedef typename _Alloc::const_reference const_reference;
       typedef typename _Alloc::pointer pointer;
       typedef typename _Alloc::const_pointer const_pointer;
       typedef __gnu_cxx::__normal_iterator<pointer, basic_string> iterator;
       typedef __gnu_cxx::__normal_iterator<const_pointer, basic_string>
                                                             const_iterator;
       typedef reverse_iterator<const_iterator> const_reverse_iterator;
       typedef reverse_iterator<iterator> reverse_iterator;
 
     private:
 # 123 "/usr/include/c++/3.2/bits/basic_string.h" 3
       struct _Rep
       {
 
         typedef typename _Alloc::template rebind<char>::other _Raw_bytes_alloc;
 # 141 "/usr/include/c++/3.2/bits/basic_string.h" 3
         static const size_type _S_max_size;
         static const _CharT _S_terminal;
 
         size_type _M_length;
         size_type _M_capacity;
         _Atomic_word _M_references;
 
         bool
         _M_is_leaked() const
         { return _M_references < 0; }
 
         bool
         _M_is_shared() const
         { return _M_references > 0; }
 
         void
         _M_set_leaked()
         { _M_references = -1; }
 
         void
         _M_set_sharable()
         { _M_references = 0; }
 
         _CharT*
         _M_refdata() throw()
         { return reinterpret_cast<_CharT*>(this + 1); }
 
         _CharT&
         operator[](size_t __s) throw()
         { return _M_refdata() [__s]; }
 
         _CharT*
         _M_grab(const _Alloc& __alloc1, const _Alloc& __alloc2)
         {
           return (!_M_is_leaked() && __alloc1 == __alloc2)
                   ? _M_refcopy() : _M_clone(__alloc1);
         }
 
 
         static _Rep*
         _S_create(size_t, const _Alloc&);
 
         void
         _M_dispose(const _Alloc& __a)
         {
           if (__exchange_and_add(&_M_references, -1) <= 0)
             _M_destroy(__a);
         }
 
         void
         _M_destroy(const _Alloc&) throw();
 
         _CharT*
         _M_refcopy() throw()
         {
           __atomic_add(&_M_references, 1);
           return _M_refdata();
         }
 
         _CharT*
         _M_clone(const _Alloc&, size_type __res = 0);
       };
 
 
       struct _Alloc_hider : _Alloc
       {
         _Alloc_hider(_CharT* __dat, const _Alloc& __a)
         : _Alloc(__a), _M_p(__dat) { }
 
         _CharT* _M_p;
       };
 
     public:
 
 
 
       static const size_type npos = static_cast<size_type>(-1);
 
     private:
 
       mutable _Alloc_hider _M_dataplus;
 
 
 
       static size_type _S_empty_rep_storage[(sizeof(_Rep) + sizeof(_CharT) + sizeof(size_type) - 1)/sizeof(size_type)];
 
       _CharT*
       _M_data() const
       { return _M_dataplus._M_p; }
 
       _CharT*
       _M_data(_CharT* __p)
       { return (_M_dataplus._M_p = __p); }
 
       _Rep*
       _M_rep() const
       { return &((reinterpret_cast<_Rep*> (_M_data()))[-1]); }
 
 
 
       iterator
       _M_ibegin() const { return iterator(_M_data()); }
 
       iterator
       _M_iend() const { return iterator(_M_data() + this->size()); }
 
       void
       _M_leak()
       {
         if (!_M_rep()->_M_is_leaked())
           _M_leak_hard();
       }
 
       iterator
       _M_check(size_type __pos) const
       {
         if (__pos > this->size())
           __throw_out_of_range("basic_string::_M_check");
         return _M_ibegin() + __pos;
       }
 
 
       iterator
       _M_fold(size_type __pos, size_type __off) const
       {
         bool __testoff = __off < this->size() - __pos;
         size_type __newoff = __testoff ? __off : this->size() - __pos;
         return (_M_ibegin() + __pos + __newoff);
       }
 
 
 
       template<class _Iterator>
         static void
         _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2)
         {
           for (; __k1 != __k2; ++__k1, ++__p)
             traits_type::assign(*__p, *__k1);
         }
 
       static void
       _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2)
       { _S_copy_chars(__p, __k1.base(), __k2.base()); }
 
       static void
       _S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2)
       { _S_copy_chars(__p, __k1.base(), __k2.base()); }
 
       static void
       _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2)
       { traits_type::copy(__p, __k1, __k2 - __k1); }
 
       static void
       _S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2)
       { traits_type::copy(__p, __k1, __k2 - __k1); }
 
       void
       _M_mutate(size_type __pos, size_type __len1, size_type __len2);
 
       void
       _M_leak_hard();
 
       static _Rep&
       _S_empty_rep()
       { return *reinterpret_cast<_Rep*>(&_S_empty_rep_storage); }
 
     public:
 
 
 
 
       inline
       basic_string();
 
       explicit
       basic_string(const _Alloc& __a);
 
 
       basic_string(const basic_string& __str);
       basic_string(const basic_string& __str, size_type __pos,
                    size_type __n = npos);
       basic_string(const basic_string& __str, size_type __pos,
                    size_type __n, const _Alloc& __a);
 
       basic_string(const _CharT* __s, size_type __n,
                    const _Alloc& __a = _Alloc());
       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc());
       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc());
 
       template<class _InputIterator>
         basic_string(_InputIterator __beg, _InputIterator __end,
                      const _Alloc& __a = _Alloc());
 
       ~basic_string()
       { _M_rep()->_M_dispose(this->get_allocator()); }
 
       basic_string&
       operator=(const basic_string& __str) { return this->assign(__str); }
 
       basic_string&
       operator=(const _CharT* __s) { return this->assign(__s); }
 
       basic_string&
       operator=(_CharT __c) { return this->assign(1, __c); }
 
 
       iterator
       begin()
       {
         _M_leak();
         return iterator(_M_data());
       }
 
       const_iterator
       begin() const
       { return const_iterator(_M_data()); }
 
       iterator
       end()
       {
          _M_leak();
          return iterator(_M_data() + this->size());
       }
 
       const_iterator
       end() const
       { return const_iterator(_M_data() + this->size()); }
 
       reverse_iterator
       rbegin()
       { return reverse_iterator(this->end()); }
 
       const_reverse_iterator
       rbegin() const
       { return const_reverse_iterator(this->end()); }
 
       reverse_iterator
       rend()
       { return reverse_iterator(this->begin()); }
 
       const_reverse_iterator
       rend() const
       { return const_reverse_iterator(this->begin()); }
 
     public:
 
       size_type
       size() const { return _M_rep()->_M_length; }
 
       size_type
       length() const { return _M_rep()->_M_length; }
 
       size_type
       max_size() const { return _Rep::_S_max_size; }
 
       void
       resize(size_type __n, _CharT __c);
 
       void
       resize(size_type __n) { this->resize(__n, _CharT()); }
 
       size_type
       capacity() const { return _M_rep()->_M_capacity; }
 
       void
       reserve(size_type __res_arg = 0);
 
       void
       clear() { _M_mutate(0, this->size(), 0); }
 
       bool
       empty() const { return this->size() == 0; }
 
 
       const_reference
       operator[] (size_type __pos) const
       { return _M_data()[__pos]; }
 
       reference
       operator[](size_type __pos)
       {
         _M_leak();
         return _M_data()[__pos];
       }
 
       const_reference
       at(size_type __n) const
       {
         if (__n >= this->size())
           __throw_out_of_range("basic_string::at");
         return _M_data()[__n];
       }
 
       reference
       at(size_type __n)
       {
         if (__n >= size())
           __throw_out_of_range("basic_string::at");
         _M_leak();
         return _M_data()[__n];
       }
 
 
       basic_string&
       operator+=(const basic_string& __str) { return this->append(__str); }
 
       basic_string&
       operator+=(const _CharT* __s) { return this->append(__s); }
 
       basic_string&
       operator+=(_CharT __c) { return this->append(size_type(1), __c); }
 
       basic_string&
       append(const basic_string& __str);
 
       basic_string&
       append(const basic_string& __str, size_type __pos, size_type __n);
 
       basic_string&
       append(const _CharT* __s, size_type __n);
 
       basic_string&
       append(const _CharT* __s)
       { return this->append(__s, traits_type::length(__s)); }
 
       basic_string&
       append(size_type __n, _CharT __c);
 
       template<class _InputIterator>
         basic_string&
         append(_InputIterator __first, _InputIterator __last)
         { return this->replace(_M_iend(), _M_iend(), __first, __last); }
 
       void
       push_back(_CharT __c)
       { this->replace(_M_iend(), _M_iend(), 1, __c); }
 
       basic_string&
       assign(const basic_string& __str);
 
       basic_string&
       assign(const basic_string& __str, size_type __pos, size_type __n)
       {
         const size_type __strsize = __str.size();
         if (__pos > __strsize)
           __throw_out_of_range("basic_string::assign");
         const bool __testn = __n < __strsize - __pos;
         const size_type __newsize = __testn ? __n : __strsize - __pos;
         return this->assign(__str._M_data() + __pos, __newsize);
       }
 
       basic_string&
       assign(const _CharT* __s, size_type __n)
       {
         if (__n > this->max_size())
           __throw_length_error("basic_string::assign");
         if (_M_rep()->_M_is_shared() || less<const _CharT*>()(__s, _M_data())
             || less<const _CharT*>()(_M_data() + this->size(), __s))
           return _M_replace_safe(_M_ibegin(), _M_iend(), __s, __s + __n);
         else
           {
 
             const size_type __pos = __s - _M_data();
             if (__pos >= __n)
               traits_type::copy(_M_data(), __s, __n);
             else if (__pos)
               traits_type::move(_M_data(), __s, __n);
             _M_rep()->_M_length = __n;
             _M_data()[__n] = _Rep::_S_terminal;
             return *this;
           }
       }
 
       basic_string&
       assign(const _CharT* __s)
       { return this->assign(__s, traits_type::length(__s)); }
 
       basic_string&
       assign(size_type __n, _CharT __c)
       { return this->replace(_M_ibegin(), _M_iend(), __n, __c); }
 
       template<class _InputIterator>
         basic_string&
         assign(_InputIterator __first, _InputIterator __last)
         { return this->replace(_M_ibegin(), _M_iend(), __first, __last); }
 
       void
       insert(iterator __p, size_type __n, _CharT __c)
       { this->replace(__p, __p, __n, __c); }
 
       template<class _InputIterator>
         void insert(iterator __p, _InputIterator __beg, _InputIterator __end)
         { this->replace(__p, __p, __beg, __end); }
 
       basic_string&
       insert(size_type __pos1, const basic_string& __str)
       { return this->insert(__pos1, __str, 0, __str.size()); }
 
       basic_string&
       insert(size_type __pos1, const basic_string& __str,
              size_type __pos2, size_type __n)
       {
         const size_type __strsize = __str.size();
         if (__pos2 > __strsize)
           __throw_out_of_range("basic_string::insert");
         const bool __testn = __n < __strsize - __pos2;
         const size_type __newsize = __testn ? __n : __strsize - __pos2;
         return this->insert(__pos1, __str._M_data() + __pos2, __newsize);
       }
 
       basic_string&
       insert(size_type __pos, const _CharT* __s, size_type __n)
       {
         const size_type __size = this->size();
         if (__pos > __size)
           __throw_out_of_range("basic_string::insert");
         if (__size > this->max_size() - __n)
           __throw_length_error("basic_string::insert");
         if (_M_rep()->_M_is_shared() || less<const _CharT*>()(__s, _M_data())
             || less<const _CharT*>()(_M_data() + __size, __s))
           return _M_replace_safe(_M_ibegin() + __pos, _M_ibegin() + __pos,
                                  __s, __s + __n);
         else
           {
 
 
 
             const size_type __off = __s - _M_data();
             _M_mutate(__pos, 0, __n);
             __s = _M_data() + __off;
             _CharT* __p = _M_data() + __pos;
             if (__s + __n <= __p)
               traits_type::copy(__p, __s, __n);
             else if (__s >= __p)
               traits_type::copy(__p, __s + __n, __n);
             else
               {
                 traits_type::copy(__p, __s, __p - __s);
                 traits_type::copy(__p + (__p - __s), __p + __n, __n - (__p - __s));
               }
             return *this;
           }
        }
 
       basic_string&
       insert(size_type __pos, const _CharT* __s)
       { return this->insert(__pos, __s, traits_type::length(__s)); }
 
       basic_string&
       insert(size_type __pos, size_type __n, _CharT __c)
       {
         this->insert(_M_check(__pos), __n, __c);
         return *this;
       }
 
       iterator
       insert(iterator __p, _CharT __c = _CharT())
       {
         size_type __pos = __p - _M_ibegin();
         this->insert(_M_check(__pos), size_type(1), __c);
         _M_rep()->_M_set_leaked();
         return this->_M_ibegin() + __pos;
       }
 
       basic_string&
       erase(size_type __pos = 0, size_type __n = npos)
       {
         return this->replace(_M_check(__pos), _M_fold(__pos, __n),
                              _M_data(), _M_data());
       }
 
       iterator
       erase(iterator __position)
       {
         size_type __i = __position - _M_ibegin();
         this->replace(__position, __position + 1, _M_data(), _M_data());
         _M_rep()->_M_set_leaked();
         return _M_ibegin() + __i;
       }
 
       iterator
       erase(iterator __first, iterator __last)
       {
         size_type __i = __first - _M_ibegin();
         this->replace(__first, __last, _M_data(), _M_data());
         _M_rep()->_M_set_leaked();
        return _M_ibegin() + __i;
       }
 
       basic_string&
       replace(size_type __pos, size_type __n, const basic_string& __str)
       { return this->replace(__pos, __n, __str._M_data(), __str.size()); }
 
       basic_string&
       replace(size_type __pos1, size_type __n1, const basic_string& __str,
               size_type __pos2, size_type __n2);
 
       basic_string&
       replace(size_type __pos, size_type __n1, const _CharT* __s,
               size_type __n2)
       {
         const size_type __size = this->size();
         if (__pos > __size)
           __throw_out_of_range("basic_string::replace");
         const bool __testn1 = __n1 < __size - __pos;
         const size_type __foldn1 = __testn1 ? __n1 : __size - __pos;
         if (__size - __foldn1 > this->max_size() - __n2)
           __throw_length_error("basic_string::replace");
         if (_M_rep()->_M_is_shared() || less<const _CharT*>()(__s, _M_data())
             || less<const _CharT*>()(_M_data() + __size, __s))
           return _M_replace_safe(_M_ibegin() + __pos,
                                  _M_ibegin() + __pos + __foldn1, __s, __s + __n2);
 
         else return
                _M_replace(_M_ibegin() + __pos, _M_ibegin() + __pos + __foldn1,
                           __s, __s + __n2,
                           typename iterator_traits<const _CharT*>::iterator_category());
       }
 
       basic_string&
       replace(size_type __pos, size_type __n1, const _CharT* __s)
       { return this->replace(__pos, __n1, __s, traits_type::length(__s)); }
 
       basic_string&
       replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c)
       { return this->replace(_M_check(__pos), _M_fold(__pos, __n1), __n2, __c); }
 
       basic_string&
       replace(iterator __i1, iterator __i2, const basic_string& __str)
       { return this->replace(__i1, __i2, __str._M_data(), __str.size()); }
 
       basic_string&
       replace(iterator __i1, iterator __i2,
                            const _CharT* __s, size_type __n)
       { return this->replace(__i1 - _M_ibegin(), __i2 - __i1, __s, __n); }
 
       basic_string&
       replace(iterator __i1, iterator __i2, const _CharT* __s)
       { return this->replace(__i1, __i2, __s, traits_type::length(__s)); }
 
       basic_string&
       replace(iterator __i1, iterator __i2, size_type __n, _CharT __c);
 
       template<class _InputIterator>
         basic_string&
         replace(iterator __i1, iterator __i2,
                 _InputIterator __k1, _InputIterator __k2)
         { return _M_replace(__i1, __i2, __k1, __k2,
              typename iterator_traits<_InputIterator>::iterator_category()); }
 
 
 
       basic_string&
       replace(iterator __i1, iterator __i2, _CharT* __k1, _CharT* __k2)
         { return this->replace(__i1 - _M_ibegin(), __i2 - __i1,
                                __k1, __k2 - __k1); }
 
       basic_string&
       replace(iterator __i1, iterator __i2, const _CharT* __k1, const _CharT* __k2)
         { return this->replace(__i1 - _M_ibegin(), __i2 - __i1,
                                __k1, __k2 - __k1); }
 
       basic_string&
       replace(iterator __i1, iterator __i2, iterator __k1, iterator __k2)
         { return this->replace(__i1 - _M_ibegin(), __i2 - __i1,
                                __k1.base(), __k2 - __k1);
         }
 
       basic_string&
       replace(iterator __i1, iterator __i2, const_iterator __k1, const_iterator __k2)
         { return this->replace(__i1 - _M_ibegin(), __i2 - __i1,
                                __k1.base(), __k2 - __k1);
         }
 
     private:
       template<class _InputIterator>
         basic_string&
         _M_replace(iterator __i1, iterator __i2, _InputIterator __k1,
                    _InputIterator __k2, input_iterator_tag);
 
       template<class _ForwardIterator>
         basic_string&
         _M_replace_safe(iterator __i1, iterator __i2, _ForwardIterator __k1,
                    _ForwardIterator __k2);
 
 
 
       template<class _InIter>
         static _CharT*
         _S_construct_aux(_InIter __beg, _InIter __end, const _Alloc& __a,
                          __false_type)
         {
           typedef typename iterator_traits<_InIter>::iterator_category _Tag;
           return _S_construct(__beg, __end, __a, _Tag());
         }
 
       template<class _InIter>
         static _CharT*
         _S_construct_aux(_InIter __beg, _InIter __end, const _Alloc& __a,
                          __true_type)
         {
           return _S_construct(static_cast<size_type>(__beg),
                               static_cast<value_type>(__end), __a);
         }
 
       template<class _InIter>
         static _CharT*
         _S_construct(_InIter __beg, _InIter __end, const _Alloc& __a)
         {
           typedef typename _Is_integer<_InIter>::_Integral _Integral;
           return _S_construct_aux(__beg, __end, __a, _Integral());
         }
 
 
       template<class _InIter>
         static _CharT*
          _S_construct(_InIter __beg, _InIter __end, const _Alloc& __a,
                       input_iterator_tag);
 
 
 
       template<class _FwdIter>
         static _CharT*
         _S_construct(_FwdIter __beg, _FwdIter __end, const _Alloc& __a,
                      forward_iterator_tag);
 
       static _CharT*
       _S_construct(size_type __req, _CharT __c, const _Alloc& __a);
 
     public:
 
       size_type
       copy(_CharT* __s, size_type __n, size_type __pos = 0) const;
 
       void
       swap(basic_string<_CharT, _Traits, _Alloc>& __s);
 
 
       const _CharT*
       c_str() const
       {
 
         size_type __n = this->size();
         traits_type::assign(_M_data()[__n], _Rep::_S_terminal);
         return _M_data();
       }
 
       const _CharT*
       data() const { return _M_data(); }
 
       allocator_type
       get_allocator() const { return _M_dataplus; }
 
       size_type
       find(const _CharT* __s, size_type __pos, size_type __n) const;
 
       size_type
       find(const basic_string& __str, size_type __pos = 0) const
       { return this->find(__str.data(), __pos, __str.size()); }
 
       size_type
       find(const _CharT* __s, size_type __pos = 0) const
       { return this->find(__s, __pos, traits_type::length(__s)); }
 
       size_type
       find(_CharT __c, size_type __pos = 0) const;
 
       size_type
       rfind(const basic_string& __str, size_type __pos = npos) const
       { return this->rfind(__str.data(), __pos, __str.size()); }
 
       size_type
       rfind(const _CharT* __s, size_type __pos, size_type __n) const;
 
       size_type
       rfind(const _CharT* __s, size_type __pos = npos) const
       { return this->rfind(__s, __pos, traits_type::length(__s)); }
 
       size_type
       rfind(_CharT __c, size_type __pos = npos) const;
 
       size_type
       find_first_of(const basic_string& __str, size_type __pos = 0) const
       { return this->find_first_of(__str.data(), __pos, __str.size()); }
 
       size_type
       find_first_of(const _CharT* __s, size_type __pos, size_type __n) const;
 
       size_type
       find_first_of(const _CharT* __s, size_type __pos = 0) const
       { return this->find_first_of(__s, __pos, traits_type::length(__s)); }
 
       size_type
       find_first_of(_CharT __c, size_type __pos = 0) const
       { return this->find(__c, __pos); }
 
       size_type
       find_last_of(const basic_string& __str, size_type __pos = npos) const
       { return this->find_last_of(__str.data(), __pos, __str.size()); }
 
       size_type
       find_last_of(const _CharT* __s, size_type __pos, size_type __n) const;
 
       size_type
       find_last_of(const _CharT* __s, size_type __pos = npos) const
       { return this->find_last_of(__s, __pos, traits_type::length(__s)); }
 
       size_type
       find_last_of(_CharT __c, size_type __pos = npos) const
       { return this->rfind(__c, __pos); }
 
       size_type
       find_first_not_of(const basic_string& __str, size_type __pos = 0) const
       { return this->find_first_not_of(__str.data(), __pos, __str.size()); }
 
       size_type
       find_first_not_of(const _CharT* __s, size_type __pos,
                         size_type __n) const;
 
       size_type
       find_first_not_of(const _CharT* __s, size_type __pos = 0) const
       { return this->find_first_not_of(__s, __pos, traits_type::length(__s)); }
 
       size_type
       find_first_not_of(_CharT __c, size_type __pos = 0) const;
 
       size_type
       find_last_not_of(const basic_string& __str, size_type __pos = npos) const
       { return this->find_last_not_of(__str.data(), __pos, __str.size()); }
 
       size_type
       find_last_not_of(const _CharT* __s, size_type __pos,
                        size_type __n) const;
       size_type
       find_last_not_of(const _CharT* __s, size_type __pos = npos) const
       { return this->find_last_not_of(__s, __pos, traits_type::length(__s)); }
 
       size_type
       find_last_not_of(_CharT __c, size_type __pos = npos) const;
 
       basic_string
       substr(size_type __pos = 0, size_type __n = npos) const
       {
         if (__pos > this->size())
           __throw_out_of_range("basic_string::substr");
         return basic_string(*this, __pos, __n);
       }
 
       int
       compare(const basic_string& __str) const
       {
         size_type __size = this->size();
         size_type __osize = __str.size();
         size_type __len = min(__size, __osize);
 
         int __r = traits_type::compare(_M_data(), __str.data(), __len);
         if (!__r)
           __r = __size - __osize;
         return __r;
       }
 
       int
       compare(size_type __pos, size_type __n, const basic_string& __str) const;
 
       int
       compare(size_type __pos1, size_type __n1, const basic_string& __str,
               size_type __pos2, size_type __n2) const;
 
       int
       compare(const _CharT* __s) const;
 
 
 
       int
       compare(size_type __pos, size_type __n1, const _CharT* __s) const;
 
       int
       compare(size_type __pos, size_type __n1, const _CharT* __s,
               size_type __n2) const;
   };
 
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline basic_string<_CharT, _Traits, _Alloc>::
     basic_string()
     : _M_dataplus(_S_empty_rep()._M_refcopy(), _Alloc()) { }
 
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>
     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
     {
       basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
       __str.append(__rhs);
       return __str;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT,_Traits,_Alloc>
     operator+(const _CharT* __lhs,
               const basic_string<_CharT,_Traits,_Alloc>& __rhs);
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT,_Traits,_Alloc>
     operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs);
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline basic_string<_CharT, _Traits, _Alloc>
     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
              const _CharT* __rhs)
     {
       basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
       __str.append(__rhs);
       return __str;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline basic_string<_CharT, _Traits, _Alloc>
     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs)
     {
       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
       typedef typename __string_type::size_type __size_type;
       __string_type __str(__lhs);
       __str.append(__size_type(1), __rhs);
       return __str;
     }
 
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline bool
     operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
                const basic_string<_CharT, _Traits, _Alloc>& __rhs)
     { return __lhs.compare(__rhs) == 0; }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline bool
     operator==(const _CharT* __lhs,
                const basic_string<_CharT, _Traits, _Alloc>& __rhs)
     { return __rhs.compare(__lhs) == 0; }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline bool
     operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
                const _CharT* __rhs)
     { return __lhs.compare(__rhs) == 0; }
 
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline bool
     operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
                const basic_string<_CharT, _Traits, _Alloc>& __rhs)
     { return __rhs.compare(__lhs) != 0; }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline bool
     operator!=(const _CharT* __lhs,
                const basic_string<_CharT, _Traits, _Alloc>& __rhs)
     { return __rhs.compare(__lhs) != 0; }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline bool
     operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
                const _CharT* __rhs)
     { return __lhs.compare(__rhs) != 0; }
 
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline bool
     operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
     { return __lhs.compare(__rhs) < 0; }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline bool
     operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const _CharT* __rhs)
     { return __lhs.compare(__rhs) < 0; }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline bool
     operator<(const _CharT* __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
     { return __rhs.compare(__lhs) > 0; }
 
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline bool
     operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
     { return __lhs.compare(__rhs) > 0; }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline bool
     operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const _CharT* __rhs)
     { return __lhs.compare(__rhs) > 0; }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline bool
     operator>(const _CharT* __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
     { return __rhs.compare(__lhs) < 0; }
 
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline bool
     operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
                const basic_string<_CharT, _Traits, _Alloc>& __rhs)
     { return __lhs.compare(__rhs) <= 0; }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline bool
     operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
                const _CharT* __rhs)
     { return __lhs.compare(__rhs) <= 0; }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline bool
     operator<=(const _CharT* __lhs,
                const basic_string<_CharT, _Traits, _Alloc>& __rhs)
   { return __rhs.compare(__lhs) >= 0; }
 
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline bool
     operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
                const basic_string<_CharT, _Traits, _Alloc>& __rhs)
     { return __lhs.compare(__rhs) >= 0; }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline bool
     operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
                const _CharT* __rhs)
     { return __lhs.compare(__rhs) >= 0; }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline bool
     operator>=(const _CharT* __lhs,
              const basic_string<_CharT, _Traits, _Alloc>& __rhs)
     { return __rhs.compare(__lhs) <= 0; }
 
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline void
     swap(basic_string<_CharT, _Traits, _Alloc>& __lhs,
          basic_string<_CharT, _Traits, _Alloc>& __rhs)
     { __lhs.swap(__rhs); }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_istream<_CharT, _Traits>&
     operator>>(basic_istream<_CharT, _Traits>& __is,
                basic_string<_CharT, _Traits, _Alloc>& __str);
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_ostream<_CharT, _Traits>&
     operator<<(basic_ostream<_CharT, _Traits>& __os,
                const basic_string<_CharT, _Traits, _Alloc>& __str);
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_istream<_CharT,_Traits>&
     getline(basic_istream<_CharT, _Traits>& __is,
             basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim);
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     inline basic_istream<_CharT,_Traits>&
     getline(basic_istream<_CharT, _Traits>& __is,
             basic_string<_CharT, _Traits, _Alloc>& __str);
 }
 # 54 "/usr/include/c++/3.2/string" 2 3
 
 
 # 1 "/usr/include/c++/3.2/algorithm" 1 3
 # 65 "/usr/include/c++/3.2/algorithm" 3
 
 
 
 
 # 1 "/usr/include/c++/3.2/bits/stl_algo.h" 1 3
 # 64 "/usr/include/c++/3.2/bits/stl_algo.h" 3
 # 1 "/usr/include/c++/3.2/bits/stl_heap.h" 1 3
 # 63 "/usr/include/c++/3.2/bits/stl_heap.h" 3
 namespace std
 {
 
 
 
   template<typename _RandomAccessIterator, typename _Distance, typename _Tp>
     void
     __push_heap(_RandomAccessIterator __first,
                 _Distance __holeIndex, _Distance __topIndex, _Tp __value)
     {
       _Distance __parent = (__holeIndex - 1) / 2;
       while (__holeIndex > __topIndex && *(__first + __parent) < __value) {
         *(__first + __holeIndex) = *(__first + __parent);
         __holeIndex = __parent;
         __parent = (__holeIndex - 1) / 2;
       }
       *(__first + __holeIndex) = __value;
     }
 
   template<typename _RandomAccessIterator>
     inline void
     push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
     {
       typedef typename iterator_traits<_RandomAccessIterator>::value_type
           _ValueType;
       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
           _DistanceType;
 
 
      
 
      
 
       __push_heap(__first, _DistanceType((__last - __first) - 1), _DistanceType(0),
                   _ValueType(*(__last - 1)));
     }
 
   template<typename _RandomAccessIterator, typename _Distance, typename _Tp,
             typename _Compare>
     void
     __push_heap(_RandomAccessIterator __first, _Distance __holeIndex,
                 _Distance __topIndex, _Tp __value, _Compare __comp)
     {
       _Distance __parent = (__holeIndex - 1) / 2;
       while (__holeIndex > __topIndex && __comp(*(__first + __parent), __value)) {
         *(__first + __holeIndex) = *(__first + __parent);
         __holeIndex = __parent;
         __parent = (__holeIndex - 1) / 2;
       }
       *(__first + __holeIndex) = __value;
     }
 
   template<typename _RandomAccessIterator, typename _Compare>
     inline void
     push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
               _Compare __comp)
     {
       typedef typename iterator_traits<_RandomAccessIterator>::value_type
           _ValueType;
       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
           _DistanceType;
 
 
      
 
 
       __push_heap(__first, _DistanceType((__last - __first) - 1), _DistanceType(0),
                   _ValueType(*(__last - 1)), __comp);
     }
 
   template<typename _RandomAccessIterator, typename _Distance, typename _Tp>
     void
     __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
                   _Distance __len, _Tp __value)
     {
       _Distance __topIndex = __holeIndex;
       _Distance __secondChild = 2 * __holeIndex + 2;
       while (__secondChild < __len) {
         if (*(__first + __secondChild) < *(__first + (__secondChild - 1)))
           __secondChild--;
         *(__first + __holeIndex) = *(__first + __secondChild);
         __holeIndex = __secondChild;
         __secondChild = 2 * (__secondChild + 1);
       }
       if (__secondChild == __len) {
         *(__first + __holeIndex) = *(__first + (__secondChild - 1));
         __holeIndex = __secondChild - 1;
       }
       __push_heap(__first, __holeIndex, __topIndex, __value);
     }
 
   template<typename _RandomAccessIterator, typename _Tp>
     inline void
     __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
                _RandomAccessIterator __result, _Tp __value)
     {
       typedef typename iterator_traits<_RandomAccessIterator>::difference_type _Distance;
       *__result = *__first;
       __adjust_heap(__first, _Distance(0), _Distance(__last - __first), __value);
     }
 
   template<typename _RandomAccessIterator>
     inline void
     pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
     {
       typedef typename iterator_traits<_RandomAccessIterator>::value_type _ValueType;
 
 
      
 
      
 
       __pop_heap(__first, __last - 1, __last - 1, _ValueType(*(__last - 1)));
     }
 
   template<typename _RandomAccessIterator, typename _Distance,
            typename _Tp, typename _Compare>
     void
     __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
                   _Distance __len, _Tp __value, _Compare __comp)
     {
       _Distance __topIndex = __holeIndex;
       _Distance __secondChild = 2 * __holeIndex + 2;
       while (__secondChild < __len) {
         if (__comp(*(__first + __secondChild), *(__first + (__secondChild - 1))))
           __secondChild--;
         *(__first + __holeIndex) = *(__first + __secondChild);
         __holeIndex = __secondChild;
         __secondChild = 2 * (__secondChild + 1);
       }
       if (__secondChild == __len) {
         *(__first + __holeIndex) = *(__first + (__secondChild - 1));
         __holeIndex = __secondChild - 1;
       }
       __push_heap(__first, __holeIndex, __topIndex, __value, __comp);
     }
 
   template<typename _RandomAccessIterator, typename _Tp, typename _Compare>
     inline void
     __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
                _RandomAccessIterator __result, _Tp __value, _Compare __comp)
     {
       typedef typename iterator_traits<_RandomAccessIterator>::difference_type _Distance;
       *__result = *__first;
       __adjust_heap(__first, _Distance(0), _Distance(__last - __first),
                     __value, __comp);
     }
 
   template<typename _RandomAccessIterator, typename _Compare>
     inline void
     pop_heap(_RandomAccessIterator __first,
              _RandomAccessIterator __last, _Compare __comp)
     {
 
      
 
 
       typedef typename iterator_traits<_RandomAccessIterator>::value_type _ValueType;
       __pop_heap(__first, __last - 1, __last - 1, _ValueType(*(__last - 1)), __comp);
     }
 
   template<typename _RandomAccessIterator>
     void
     make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
     {
       typedef typename iterator_traits<_RandomAccessIterator>::value_type
           _ValueType;
       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
           _DistanceType;
 
 
      
 
      
 
       if (__last - __first < 2) return;
       _DistanceType __len = __last - __first;
       _DistanceType __parent = (__len - 2)/2;
 
       while (true) {
         __adjust_heap(__first, __parent, __len, _ValueType(*(__first + __parent)));
         if (__parent == 0) return;
         __parent--;
       }
     }
 
   template<typename _RandomAccessIterator, typename _Compare>
     inline void
     make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
               _Compare __comp)
     {
       typedef typename iterator_traits<_RandomAccessIterator>::value_type
           _ValueType;
       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
           _DistanceType;
 
 
      
 
 
       if (__last - __first < 2) return;
       _DistanceType __len = __last - __first;
       _DistanceType __parent = (__len - 2)/2;
 
       while (true) {
         __adjust_heap(__first, __parent, __len,
                       _ValueType(*(__first + __parent)), __comp);
         if (__parent == 0) return;
         __parent--;
       }
     }
 
   template<typename _RandomAccessIterator>
     void
     sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
     {
 
      
 
      
 
 
       while (__last - __first > 1)
         pop_heap(__first, __last--);
     }
 
   template<typename _RandomAccessIterator, typename _Compare>
     void
     sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
               _Compare __comp)
     {
 
      
 
 
       while (__last - __first > 1)
         pop_heap(__first, __last--, __comp);
     }
 
 }
 # 65 "/usr/include/c++/3.2/bits/stl_algo.h" 2 3
 # 1 "/usr/include/c++/3.2/bits/stl_tempbuf.h" 1 3
 # 64 "/usr/include/c++/3.2/bits/stl_tempbuf.h" 3
 namespace std
 {
 # 74 "/usr/include/c++/3.2/bits/stl_tempbuf.h" 3
 template <class _ForwardIterator, class _Tp>
   class _Temporary_buffer
 {
 
  
 
   ptrdiff_t _M_original_len;
   ptrdiff_t _M_len;
   _Tp* _M_buffer;
 
 
   void _M_allocate_buffer() {
     _M_original_len = _M_len;
     _M_buffer = 0;
 
     if (_M_len > (ptrdiff_t)(2147483647 / sizeof(_Tp)))
       _M_len = 2147483647 / sizeof(_Tp);
 
     while (_M_len > 0) {
       _M_buffer = (_Tp*) malloc(_M_len * sizeof(_Tp));
       if (_M_buffer)
         break;
       _M_len /= 2;
     }
   }
 
   void _M_initialize_buffer(const _Tp&, __true_type) {}
   void _M_initialize_buffer(const _Tp& val, __false_type) {
     uninitialized_fill_n(_M_buffer, _M_len, val);
   }
 
 public:
 
   ptrdiff_t size() const { return _M_len; }
 
   ptrdiff_t requested_size() const { return _M_original_len; }
 
   _Tp* begin() { return _M_buffer; }
 
   _Tp* end() { return _M_buffer + _M_len; }
 
   _Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last) {
 
     typedef typename __type_traits<_Tp>::has_trivial_default_constructor
             _Trivial;
 
     try {
       _M_len = distance(__first, __last);
       _M_allocate_buffer();
       if (_M_len > 0)
         _M_initialize_buffer(*__first, _Trivial());
     }
     catch(...)
       {
         free(_M_buffer);
         _M_buffer = 0;
         _M_len = 0;
         throw;
       }
   }
 
   ~_Temporary_buffer() {
     _Destroy(_M_buffer, _M_buffer + _M_len);
     free(_M_buffer);
   }
 
 private:
 
   _Temporary_buffer(const _Temporary_buffer&) {}
   void operator=(const _Temporary_buffer&) {}
 };
 
 }
 # 66 "/usr/include/c++/3.2/bits/stl_algo.h" 2 3
 
 
 
 namespace std
 {
 # 84 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _Tp>
   inline const _Tp&
     __median(const _Tp& __a, const _Tp& __b, const _Tp& __c)
     {
 
      
       if (__a < __b)
         if (__b < __c)
           return __b;
         else if (__a < __c)
           return __c;
         else
           return __a;
       else if (__a < __c)
         return __a;
       else if (__b < __c)
         return __c;
       else
         return __b;
     }
 # 118 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _Tp, typename _Compare>
     inline const _Tp&
     __median(const _Tp& __a, const _Tp& __b, const _Tp& __c, _Compare __comp)
     {
 
      
       if (__comp(__a, __b))
         if (__comp(__b, __c))
           return __b;
         else if (__comp(__a, __c))
           return __c;
         else
           return __a;
       else if (__comp(__a, __c))
         return __a;
       else if (__comp(__b, __c))
         return __c;
       else
         return __b;
     }
 # 150 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter, typename _Function>
     _Function
     for_each(_InputIter __first, _InputIter __last, _Function __f)
     {
 
      
       for ( ; __first != __last; ++__first)
         __f(*__first);
       return __f;
     }
 
 
 
 
 
 
   template<typename _InputIter, typename _Tp>
     inline _InputIter
     find(_InputIter __first, _InputIter __last,
          const _Tp& __val,
          input_iterator_tag)
     {
       while (__first != __last && !(*__first == __val))
         ++__first;
       return __first;
     }
 
 
 
 
 
 
   template<typename _InputIter, typename _Predicate>
     inline _InputIter
     find_if(_InputIter __first, _InputIter __last,
             _Predicate __pred,
             input_iterator_tag)
     {
       while (__first != __last && !__pred(*__first))
         ++__first;
       return __first;
     }
 
 
 
 
 
 
   template<typename _RandomAccessIter, typename _Tp>
     _RandomAccessIter
     find(_RandomAccessIter __first, _RandomAccessIter __last,
          const _Tp& __val,
          random_access_iterator_tag)
     {
       typename iterator_traits<_RandomAccessIter>::difference_type __trip_count
         = (__last - __first) >> 2;
 
       for ( ; __trip_count > 0 ; --__trip_count) {
         if (*__first == __val) return __first;
         ++__first;
 
         if (*__first == __val) return __first;
         ++__first;
 
         if (*__first == __val) return __first;
         ++__first;
 
         if (*__first == __val) return __first;
         ++__first;
       }
 
       switch(__last - __first) {
       case 3:
         if (*__first == __val) return __first;
         ++__first;
       case 2:
         if (*__first == __val) return __first;
         ++__first;
       case 1:
         if (*__first == __val) return __first;
         ++__first;
       case 0:
       default:
         return __last;
       }
     }
 
 
 
 
 
 
   template<typename _RandomAccessIter, typename _Predicate>
     _RandomAccessIter
     find_if(_RandomAccessIter __first, _RandomAccessIter __last,
             _Predicate __pred,
             random_access_iterator_tag)
     {
       typename iterator_traits<_RandomAccessIter>::difference_type __trip_count
         = (__last - __first) >> 2;
 
       for ( ; __trip_count > 0 ; --__trip_count) {
         if (__pred(*__first)) return __first;
         ++__first;
 
         if (__pred(*__first)) return __first;
         ++__first;
 
         if (__pred(*__first)) return __first;
         ++__first;
 
         if (__pred(*__first)) return __first;
         ++__first;
       }
 
       switch(__last - __first) {
       case 3:
         if (__pred(*__first)) return __first;
         ++__first;
       case 2:
         if (__pred(*__first)) return __first;
         ++__first;
       case 1:
         if (__pred(*__first)) return __first;
         ++__first;
       case 0:
       default:
         return __last;
       }
     }
 # 289 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter, typename _Tp>
     inline _InputIter
     find(_InputIter __first, _InputIter __last,
          const _Tp& __val)
     {
 
      
      
 
       return find(__first, __last, __val, __iterator_category(__first));
     }
 # 309 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter, typename _Predicate>
     inline _InputIter
     find_if(_InputIter __first, _InputIter __last,
             _Predicate __pred)
     {
 
      
      
 
       return find_if(__first, __last, __pred, __iterator_category(__first));
     }
 # 329 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter>
     _ForwardIter
     adjacent_find(_ForwardIter __first, _ForwardIter __last)
     {
 
      
      
 
       if (__first == __last)
         return __last;
       _ForwardIter __next = __first;
       while(++__next != __last) {
         if (*__first == *__next)
           return __first;
         __first = __next;
       }
       return __last;
     }
 # 358 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _BinaryPredicate>
     _ForwardIter
     adjacent_find(_ForwardIter __first, _ForwardIter __last,
                   _BinaryPredicate __binary_pred)
     {
 
      
      
 
 
       if (__first == __last)
         return __last;
       _ForwardIter __next = __first;
       while(++__next != __last) {
         if (__binary_pred(*__first, *__next))
           return __first;
         __first = __next;
       }
       return __last;
     }
 # 387 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter, typename _Tp>
     typename iterator_traits<_InputIter>::difference_type
     count(_InputIter __first, _InputIter __last, const _Tp& __value)
     {
 
      
      
 
      
       typename iterator_traits<_InputIter>::difference_type __n = 0;
       for ( ; __first != __last; ++__first)
         if (*__first == __value)
           ++__n;
       return __n;
     }
 # 411 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter, typename _Predicate>
     typename iterator_traits<_InputIter>::difference_type
     count_if(_InputIter __first, _InputIter __last, _Predicate __pred)
     {
 
      
      
 
       typename iterator_traits<_InputIter>::difference_type __n = 0;
       for ( ; __first != __last; ++__first)
         if (__pred(*__first))
           ++__n;
       return __n;
     }
 # 450 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter1, typename _ForwardIter2>
     _ForwardIter1
     search(_ForwardIter1 __first1, _ForwardIter1 __last1,
            _ForwardIter2 __first2, _ForwardIter2 __last2)
     {
 
      
      
      
 
 
 
 
       if (__first1 == __last1 || __first2 == __last2)
         return __first1;
 
 
       _ForwardIter2 __tmp(__first2);
       ++__tmp;
       if (__tmp == __last2)
         return find(__first1, __last1, *__first2);
 
 
 
       _ForwardIter2 __p1, __p;
 
       __p1 = __first2; ++__p1;
 
       _ForwardIter1 __current = __first1;
 
       while (__first1 != __last1) {
         __first1 = find(__first1, __last1, *__first2);
         if (__first1 == __last1)
           return __last1;
 
         __p = __p1;
         __current = __first1;
         if (++__current == __last1)
           return __last1;
 
         while (*__current == *__p) {
           if (++__p == __last2)
             return __first1;
           if (++__current == __last1)
             return __last1;
         }
 
         ++__first1;
       }
       return __first1;
     }
 # 522 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter1, typename _ForwardIter2, typename _BinaryPred>
     _ForwardIter1
     search(_ForwardIter1 __first1, _ForwardIter1 __last1,
            _ForwardIter2 __first2, _ForwardIter2 __last2,
            _BinaryPred __predicate)
     {
 
      
      
      
 
 
 
 
       if (__first1 == __last1 || __first2 == __last2)
         return __first1;
 
 
       _ForwardIter2 __tmp(__first2);
       ++__tmp;
       if (__tmp == __last2) {
         while (__first1 != __last1 && !__predicate(*__first1, *__first2))
           ++__first1;
         return __first1;
       }
 
 
 
       _ForwardIter2 __p1, __p;
 
       __p1 = __first2; ++__p1;
 
       _ForwardIter1 __current = __first1;
 
       while (__first1 != __last1) {
         while (__first1 != __last1) {
           if (__predicate(*__first1, *__first2))
             break;
           ++__first1;
         }
         while (__first1 != __last1 && !__predicate(*__first1, *__first2))
           ++__first1;
         if (__first1 == __last1)
           return __last1;
 
         __p = __p1;
         __current = __first1;
         if (++__current == __last1) return __last1;
 
         while (__predicate(*__current, *__p)) {
           if (++__p == __last2)
             return __first1;
           if (++__current == __last1)
             return __last1;
         }
 
         ++__first1;
       }
       return __first1;
     }
 # 596 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _Integer, typename _Tp>
     _ForwardIter
     search_n(_ForwardIter __first, _ForwardIter __last,
              _Integer __count, const _Tp& __val)
     {
 
      
      
 
      
 
       if (__count <= 0)
         return __first;
       else {
         __first = find(__first, __last, __val);
         while (__first != __last) {
           _Integer __n = __count - 1;
           _ForwardIter __i = __first;
           ++__i;
           while (__i != __last && __n != 0 && *__i == __val) {
             ++__i;
             --__n;
           }
           if (__n == 0)
             return __first;
           else
             __first = find(__i, __last, __val);
         }
         return __last;
       }
     }
 # 643 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _Integer, typename _Tp,
            typename _BinaryPred>
     _ForwardIter
     search_n(_ForwardIter __first, _ForwardIter __last,
              _Integer __count, const _Tp& __val,
              _BinaryPred __binary_pred)
     {
 
      
      
 
 
       if (__count <= 0)
         return __first;
       else {
         while (__first != __last) {
           if (__binary_pred(*__first, __val))
             break;
           ++__first;
         }
         while (__first != __last) {
           _Integer __n = __count - 1;
           _ForwardIter __i = __first;
           ++__i;
           while (__i != __last && __n != 0 && __binary_pred(*__i, __val)) {
             ++__i;
             --__n;
           }
           if (__n == 0)
             return __first;
           else {
             while (__i != __last) {
               if (__binary_pred(*__i, __val))
                 break;
               ++__i;
             }
             __first = __i;
           }
         }
         return __last;
       }
     }
 # 697 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter1, typename _ForwardIter2>
     _ForwardIter2
     swap_ranges(_ForwardIter1 __first1, _ForwardIter1 __last1,
                 _ForwardIter2 __first2)
     {
 
      
      
      
 
 
      
 
 
 
       for ( ; __first1 != __last1; ++__first1, ++__first2)
         iter_swap(__first1, __first2);
       return __first2;
     }
 # 732 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter, typename _OutputIter, typename _UnaryOperation>
     _OutputIter
     transform(_InputIter __first, _InputIter __last,
               _OutputIter __result, _UnaryOperation __unary_op)
     {
 
      
      
 
 
 
       for ( ; __first != __last; ++__first, ++__result)
         *__result = __unary_op(*__first);
       return __result;
     }
 # 765 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter1, typename _InputIter2, typename _OutputIter,
            typename _BinaryOperation>
     _OutputIter
     transform(_InputIter1 __first1, _InputIter1 __last1,
               _InputIter2 __first2, _OutputIter __result,
               _BinaryOperation __binary_op)
     {
 
      
      
      
 
 
 
       for ( ; __first1 != __last1; ++__first1, ++__first2, ++__result)
         *__result = __binary_op(*__first1, *__first2);
       return __result;
     }
 # 796 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _Tp>
     void
     replace(_ForwardIter __first, _ForwardIter __last,
             const _Tp& __old_value, const _Tp& __new_value)
     {
 
      
      
 
      
 
 
       for ( ; __first != __last; ++__first)
         if (*__first == __old_value)
           *__first = __new_value;
     }
 # 825 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _Predicate, typename _Tp>
     void
     replace_if(_ForwardIter __first, _ForwardIter __last,
                _Predicate __pred, const _Tp& __new_value)
     {
 
      
      
 
      
 
 
       for ( ; __first != __last; ++__first)
         if (__pred(*__first))
           *__first = __new_value;
     }
 # 856 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter, typename _OutputIter, typename _Tp>
     _OutputIter
     replace_copy(_InputIter __first, _InputIter __last,
                  _OutputIter __result,
                  const _Tp& __old_value, const _Tp& __new_value)
     {
 
      
      
 
      
 
 
       for ( ; __first != __last; ++__first, ++__result)
         *__result = *__first == __old_value ? __new_value : *__first;
       return __result;
     }
 # 888 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter, typename _OutputIter, typename _Predicate,
            typename _Tp>
     _OutputIter
     replace_copy_if(_InputIter __first, _InputIter __last,
                     _OutputIter __result,
                     _Predicate __pred, const _Tp& __new_value)
     {
 
      
      
 
      
 
 
       for ( ; __first != __last; ++__first, ++__result)
         *__result = __pred(*__first) ? __new_value : *__first;
       return __result;
     }
 # 918 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _Generator>
     void
     generate(_ForwardIter __first, _ForwardIter __last, _Generator __gen)
     {
 
      
      
 
 
       for ( ; __first != __last; ++__first)
         *__first = __gen();
     }
 # 942 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _OutputIter, typename _Size, typename _Generator>
     _OutputIter
     generate_n(_OutputIter __first, _Size __n, _Generator __gen)
     {
 
      
 
 
 
       for ( ; __n > 0; --__n, ++__first)
         *__first = __gen();
       return __first;
     }
 # 969 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter, typename _OutputIter, typename _Tp>
     _OutputIter
     remove_copy(_InputIter __first, _InputIter __last,
                 _OutputIter __result, const _Tp& __value)
     {
 
      
      
 
      
 
 
       for ( ; __first != __last; ++__first)
         if (!(*__first == __value)) {
           *__result = *__first;
           ++__result;
         }
       return __result;
     }
 # 1003 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter, typename _OutputIter, typename _Predicate>
     _OutputIter
     remove_copy_if(_InputIter __first, _InputIter __last,
                    _OutputIter __result, _Predicate __pred)
     {
 
      
      
 
      
 
 
       for ( ; __first != __last; ++__first)
         if (!__pred(*__first)) {
           *__result = *__first;
           ++__result;
         }
       return __result;
     }
 # 1039 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _Tp>
     _ForwardIter
     remove(_ForwardIter __first, _ForwardIter __last,
            const _Tp& __value)
     {
 
      
      
 
      
 
 
       __first = find(__first, __last, __value);
       _ForwardIter __i = __first;
       return __first == __last ? __first
                                : remove_copy(++__i, __last, __first, __value);
     }
 # 1073 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _Predicate>
     _ForwardIter
     remove_if(_ForwardIter __first, _ForwardIter __last,
               _Predicate __pred)
     {
 
      
      
 
 
       __first = find_if(__first, __last, __pred);
       _ForwardIter __i = __first;
       return __first == __last ? __first
                                : remove_copy_if(++__i, __last, __first, __pred);
     }
 
 
 
 
 
 
 
   template<typename _InputIter, typename _OutputIter>
     _OutputIter
     __unique_copy(_InputIter __first, _InputIter __last,
                   _OutputIter __result,
                   output_iterator_tag)
     {
 
       typename iterator_traits<_InputIter>::value_type __value = *__first;
       *__result = __value;
       while (++__first != __last)
         if (!(__value == *__first)) {
           __value = *__first;
           *++__result = __value;
         }
       return ++__result;
     }
 
 
 
 
 
 
 
   template<typename _InputIter, typename _ForwardIter>
     _ForwardIter
     __unique_copy(_InputIter __first, _InputIter __last,
                   _ForwardIter __result,
                   forward_iterator_tag)
     {
 
       *__result = *__first;
       while (++__first != __last)
         if (!(*__result == *__first))
           *++__result = *__first;
       return ++__result;
     }
 # 1145 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter, typename _OutputIter>
     inline _OutputIter
     unique_copy(_InputIter __first, _InputIter __last,
                 _OutputIter __result)
     {
 
      
      
 
      
 
 
       typedef typename iterator_traits<_OutputIter>::iterator_category _IterType;
 
       if (__first == __last) return __result;
       return __unique_copy(__first, __last, __result, _IterType());
     }
 # 1170 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter, typename _OutputIter, typename _BinaryPredicate>
     _OutputIter
     __unique_copy(_InputIter __first, _InputIter __last,
                   _OutputIter __result,
                   _BinaryPredicate __binary_pred,
                   output_iterator_tag)
     {
 
      
 
 
 
       typename iterator_traits<_InputIter>::value_type __value = *__first;
       *__result = __value;
       while (++__first != __last)
         if (!__binary_pred(__value, *__first)) {
           __value = *__first;
           *++__result = __value;
         }
       return ++__result;
     }
 # 1199 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter, typename _ForwardIter, typename _BinaryPredicate>
     _ForwardIter
     __unique_copy(_InputIter __first, _InputIter __last,
                   _ForwardIter __result,
                   _BinaryPredicate __binary_pred,
                   forward_iterator_tag)
     {
 
      
 
 
 
       *__result = *__first;
       while (++__first != __last)
         if (!__binary_pred(*__result, *__first)) *++__result = *__first;
       return ++__result;
     }
 # 1232 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter, typename _OutputIter, typename _BinaryPredicate>
     inline _OutputIter
     unique_copy(_InputIter __first, _InputIter __last,
                 _OutputIter __result,
                 _BinaryPredicate __binary_pred)
     {
 
      
      
 
 
       typedef typename iterator_traits<_OutputIter>::iterator_category _IterType;
 
       if (__first == __last) return __result;
       return __unique_copy(__first, __last,
 __result, __binary_pred, _IterType());
     }
 # 1263 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter>
     _ForwardIter
     unique(_ForwardIter __first, _ForwardIter __last)
     {
 
          
          
 
 
           __first = adjacent_find(__first, __last);
           return unique_copy(__first, __last, __first);
     }
 # 1290 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _BinaryPredicate>
     _ForwardIter
     unique(_ForwardIter __first, _ForwardIter __last,
            _BinaryPredicate __binary_pred)
     {
 
      
      
 
 
 
       __first = adjacent_find(__first, __last, __binary_pred);
       return unique_copy(__first, __last, __first, __binary_pred);
     }
 
 
 
 
 
 
 
   template<typename _BidirectionalIter>
     void
     __reverse(_BidirectionalIter __first, _BidirectionalIter __last,
                           bidirectional_iterator_tag)
     {
           while (true)
             if (__first == __last || __first == --__last)
                   return;
             else
                   iter_swap(__first++, __last);
     }
 
 
 
 
 
 
 
   template<typename _RandomAccessIter>
     void
     __reverse(_RandomAccessIter __first, _RandomAccessIter __last,
                           random_access_iterator_tag)
     {
           while (__first < __last)
             iter_swap(__first++, --__last);
     }
 # 1349 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _BidirectionalIter>
     inline void
     reverse(_BidirectionalIter __first, _BidirectionalIter __last)
     {
 
          
 
           __reverse(__first, __last, __iterator_category(__first));
     }
 # 1374 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _BidirectionalIter, typename _OutputIter>
     _OutputIter
     reverse_copy(_BidirectionalIter __first, _BidirectionalIter __last,
                              _OutputIter __result)
     {
 
      
      
 
 
       while (__first != __last) {
         --__last;
         *__result = *__last;
         ++__result;
       }
       return __result;
     }
 # 1399 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _EuclideanRingElement>
     _EuclideanRingElement
     __gcd(_EuclideanRingElement __m, _EuclideanRingElement __n)
     {
       while (__n != 0) {
         _EuclideanRingElement __t = __m % __n;
         __m = __n;
         __n = __t;
       }
       return __m;
     }
 
 
 
 
 
 
   template<typename _ForwardIter>
     void
     __rotate(_ForwardIter __first,
              _ForwardIter __middle,
              _ForwardIter __last,
               forward_iterator_tag)
     {
       if ((__first == __middle) || (__last == __middle))
         return;
 
       _ForwardIter __first2 = __middle;
       do {
         swap(*__first++, *__first2++);
         if (__first == __middle)
           __middle = __first2;
       } while (__first2 != __last);
 
       __first2 = __middle;
 
       while (__first2 != __last) {
         swap(*__first++, *__first2++);
         if (__first == __middle)
           __middle = __first2;
         else if (__first2 == __last)
           __first2 = __middle;
       }
     }
 
 
 
 
 
 
   template<typename _BidirectionalIter>
     void
     __rotate(_BidirectionalIter __first,
              _BidirectionalIter __middle,
              _BidirectionalIter __last,
               bidirectional_iterator_tag)
     {
 
      
 
 
       if ((__first == __middle) || (__last == __middle))
         return;
 
       __reverse(__first, __middle, bidirectional_iterator_tag());
       __reverse(__middle, __last, bidirectional_iterator_tag());
 
       while (__first != __middle && __middle != __last)
         swap (*__first++, *--__last);
 
       if (__first == __middle) {
         __reverse(__middle, __last, bidirectional_iterator_tag());
       }
       else {
         __reverse(__first, __middle, bidirectional_iterator_tag());
       }
     }
 
 
 
 
 
 
   template<typename _RandomAccessIter>
     void
     __rotate(_RandomAccessIter __first,
              _RandomAccessIter __middle,
              _RandomAccessIter __last,
              random_access_iterator_tag)
     {
 
      
 
 
       if ((__first == __middle) || (__last == __middle))
         return;
 
       typedef typename iterator_traits<_RandomAccessIter>::difference_type _Distance;
       typedef typename iterator_traits<_RandomAccessIter>::value_type _ValueType;
 
       _Distance __n = __last - __first;
       _Distance __k = __middle - __first;
       _Distance __l = __n - __k;
 
       if (__k == __l) {
         swap_ranges(__first, __middle, __middle);
         return;
       }
 
       _Distance __d = __gcd(__n, __k);
 
       for (_Distance __i = 0; __i < __d; __i++) {
         _ValueType __tmp = *__first;
         _RandomAccessIter __p = __first;
 
         if (__k < __l) {
           for (_Distance __j = 0; __j < __l/__d; __j++) {
             if (__p > __first + __l) {
               *__p = *(__p - __l);
               __p -= __l;
             }
 
             *__p = *(__p + __k);
             __p += __k;
           }
         }
 
         else {
           for (_Distance __j = 0; __j < __k/__d - 1; __j ++) {
             if (__p < __last - __k) {
               *__p = *(__p + __k);
               __p += __k;
             }
 
             *__p = * (__p - __l);
             __p -= __l;
           }
         }
 
         *__p = __tmp;
         ++__first;
       }
     }
 # 1561 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter>
     inline void
     rotate(_ForwardIter __first, _ForwardIter __middle, _ForwardIter __last)
     {
 
      
 
       typedef typename iterator_traits<_ForwardIter>::iterator_category _IterType;
       __rotate(__first, __middle, __last, _IterType());
     }
 # 1589 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _OutputIter>
     _OutputIter
     rotate_copy(_ForwardIter __first, _ForwardIter __middle,
                 _ForwardIter __last, _OutputIter __result)
     {
 
      
      
 
 
       return copy(__first, __middle, copy(__middle, __last, __result));
     }
 # 1612 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _Distance>
     inline _Distance
     __random_number(_Distance __n)
     {
 
       return lrand48() % __n;
 
 
 
     }
 # 1634 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _RandomAccessIter>
     inline void
     random_shuffle(_RandomAccessIter __first, _RandomAccessIter __last)
     {
 
      
 
 
       if (__first == __last) return;
       for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
         iter_swap(__i, __first + __random_number((__i - __first) + 1));
     }
 # 1660 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _RandomAccessIter, typename _RandomNumberGenerator>
     void
     random_shuffle(_RandomAccessIter __first, _RandomAccessIter __last,
                    _RandomNumberGenerator& __rand)
     {
 
      
 
 
       if (__first == __last) return;
       for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
         iter_swap(__i, __first + __rand((__i - __first) + 1));
     }
 
 
 
 
 
 
 
   template<typename _ForwardIter, typename _Predicate>
     _ForwardIter
     __partition(_ForwardIter __first, _ForwardIter __last,
                 _Predicate __pred,
                 forward_iterator_tag)
     {
       if (__first == __last) return __first;
 
       while (__pred(*__first))
         if (++__first == __last) return __first;
 
       _ForwardIter __next = __first;
 
       while (++__next != __last)
         if (__pred(*__next)) {
           swap(*__first, *__next);
           ++__first;
         }
 
       return __first;
     }
 
 
 
 
 
 
   template<typename _BidirectionalIter, typename _Predicate>
     _BidirectionalIter
     __partition(_BidirectionalIter __first, _BidirectionalIter __last,
                 _Predicate __pred,
                 bidirectional_iterator_tag)
     {
       while (true) {
         while (true)
           if (__first == __last)
             return __first;
           else if (__pred(*__first))
             ++__first;
           else
             break;
         --__last;
         while (true)
           if (__first == __last)
             return __first;
           else if (!__pred(*__last))
             --__last;
           else
             break;
         iter_swap(__first, __last);
         ++__first;
       }
     }
 # 1748 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _Predicate>
     inline _ForwardIter
     partition(_ForwardIter __first, _ForwardIter __last,
               _Predicate __pred)
     {
 
      
      
 
 
       return __partition(__first, __last, __pred, __iterator_category(__first));
     }
 
 
 
 
 
 
 
   template<typename _ForwardIter, typename _Predicate, typename _Distance>
     _ForwardIter
     __inplace_stable_partition(_ForwardIter __first, _ForwardIter __last,
                                _Predicate __pred, _Distance __len)
     {
       if (__len == 1)
         return __pred(*__first) ? __last : __first;
       _ForwardIter __middle = __first;
       advance(__middle, __len / 2);
       _ForwardIter __begin = __inplace_stable_partition(__first, __middle,
                                                         __pred,
                                                         __len / 2);
       _ForwardIter __end = __inplace_stable_partition(__middle, __last,
                                                       __pred,
                                                       __len - __len / 2);
       rotate(__begin, __middle, __end);
       advance(__begin, distance(__middle, __end));
       return __begin;
     }
 
 
 
 
 
 
   template<typename _ForwardIter, typename _Pointer, typename _Predicate,
            typename _Distance>
     _ForwardIter
     __stable_partition_adaptive(_ForwardIter __first, _ForwardIter __last,
                                 _Predicate __pred, _Distance __len,
                                 _Pointer __buffer,
                                 _Distance __buffer_size)
     {
       if (__len <= __buffer_size) {
         _ForwardIter __result1 = __first;
         _Pointer __result2 = __buffer;
         for ( ; __first != __last ; ++__first)
           if (__pred(*__first)) {
             *__result1 = *__first;
             ++__result1;
           }
           else {
             *__result2 = *__first;
             ++__result2;
           }
         copy(__buffer, __result2, __result1);
         return __result1;
       }
       else {
         _ForwardIter __middle = __first;
         advance(__middle, __len / 2);
         _ForwardIter __begin = __stable_partition_adaptive(__first, __middle,
                                                            __pred,
                                                            __len / 2,
                                                            __buffer, __buffer_size);
         _ForwardIter __end = __stable_partition_adaptive( __middle, __last,
                                                           __pred,
                                                           __len - __len / 2,
                                                           __buffer, __buffer_size);
         rotate(__begin, __middle, __end);
         advance(__begin, distance(__middle, __end));
         return __begin;
       }
     }
 # 1848 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _Predicate>
     _ForwardIter
     stable_partition(_ForwardIter __first, _ForwardIter __last,
                      _Predicate __pred)
     {
 
      
      
 
 
       if (__first == __last)
         return __first;
       else
       {
         typedef typename iterator_traits<_ForwardIter>::value_type _ValueType;
         typedef typename iterator_traits<_ForwardIter>::difference_type _DistanceType;
 
         _Temporary_buffer<_ForwardIter, _ValueType> __buf(__first, __last);
         if (__buf.size() > 0)
           return __stable_partition_adaptive(__first, __last, __pred,
                                              _DistanceType(__buf.requested_size()),
                                              __buf.begin(), __buf.size());
         else
           return __inplace_stable_partition(__first, __last, __pred,
                                             _DistanceType(__buf.requested_size()));
       }
     }
 
 
 
 
 
 
   template<typename _RandomAccessIter, typename _Tp>
     _RandomAccessIter
     __unguarded_partition(_RandomAccessIter __first, _RandomAccessIter __last,
                           _Tp __pivot)
     {
       while (true) {
         while (*__first < __pivot)
           ++__first;
         --__last;
         while (__pivot < *__last)
           --__last;
         if (!(__first < __last))
           return __first;
         iter_swap(__first, __last);
         ++__first;
       }
     }
 
 
 
 
 
 
   template<typename _RandomAccessIter, typename _Tp, typename _Compare>
     _RandomAccessIter
     __unguarded_partition(_RandomAccessIter __first, _RandomAccessIter __last,
                           _Tp __pivot, _Compare __comp)
     {
       while (true) {
         while (__comp(*__first, __pivot))
           ++__first;
         --__last;
         while (__comp(__pivot, *__last))
           --__last;
         if (!(__first < __last))
           return __first;
         iter_swap(__first, __last);
         ++__first;
       }
     }
 # 1929 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   enum { _M_threshold = 16 };
 
 
 
 
 
 
   template<typename _RandomAccessIter, typename _Tp>
     void
     __unguarded_linear_insert(_RandomAccessIter __last, _Tp __val)
     {
       _RandomAccessIter __next = __last;
       --__next;
       while (__val < *__next) {
         *__last = *__next;
         __last = __next;
         --__next;
       }
       *__last = __val;
     }
 
 
 
 
 
 
   template<typename _RandomAccessIter, typename _Tp, typename _Compare>
     void
     __unguarded_linear_insert(_RandomAccessIter __last, _Tp __val, _Compare __comp)
     {
       _RandomAccessIter __next = __last;
       --__next;
       while (__comp(__val, *__next)) {
         *__last = *__next;
         __last = __next;
         --__next;
       }
       *__last = __val;
     }
 
 
 
 
 
 
   template<typename _RandomAccessIter>
     void
     __insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last)
     {
       if (__first == __last) return;
 
       for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
       {
         typename iterator_traits<_RandomAccessIter>::value_type __val = *__i;
         if (__val < *__first) {
           copy_backward(__first, __i, __i + 1);
           *__first = __val;
         }
         else
           __unguarded_linear_insert(__i, __val);
       }
     }
 
 
 
 
 
 
   template<typename _RandomAccessIter, typename _Compare>
     void
     __insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last,
                      _Compare __comp)
     {
       if (__first == __last) return;
 
       for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
       {
         typename iterator_traits<_RandomAccessIter>::value_type __val = *__i;
         if (__comp(__val, *__first)) {
           copy_backward(__first, __i, __i + 1);
           *__first = __val;
         }
         else
           __unguarded_linear_insert(__i, __val, __comp);
       }
     }
 
 
 
 
 
 
   template<typename _RandomAccessIter>
     inline void
     __unguarded_insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last)
     {
       typedef typename iterator_traits<_RandomAccessIter>::value_type _ValueType;
 
       for (_RandomAccessIter __i = __first; __i != __last; ++__i)
         __unguarded_linear_insert(__i, _ValueType(*__i));
     }
 
 
 
 
 
 
   template<typename _RandomAccessIter, typename _Compare>
     inline void
     __unguarded_insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last,
                                _Compare __comp)
     {
       typedef typename iterator_traits<_RandomAccessIter>::value_type _ValueType;
 
       for (_RandomAccessIter __i = __first; __i != __last; ++__i)
         __unguarded_linear_insert(__i, _ValueType(*__i), __comp);
     }
 
 
 
 
 
 
   template<typename _RandomAccessIter>
     void
     __final_insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last)
     {
       if (__last - __first > _M_threshold) {
         __insertion_sort(__first, __first + _M_threshold);
         __unguarded_insertion_sort(__first + _M_threshold, __last);
       }
       else
         __insertion_sort(__first, __last);
     }
 
 
 
 
 
 
   template<typename _RandomAccessIter, typename _Compare>
     void
     __final_insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last,
                            _Compare __comp)
     {
       if (__last - __first > _M_threshold) {
         __insertion_sort(__first, __first + _M_threshold, __comp);
         __unguarded_insertion_sort(__first + _M_threshold, __last, __comp);
       }
       else
         __insertion_sort(__first, __last, __comp);
     }
 
 
 
 
 
 
   template<typename _Size>
     inline _Size
     __lg(_Size __n)
     {
       _Size __k;
       for (__k = 0; __n != 1; __n >>= 1) ++__k;
       return __k;
     }
 
 
 
 
 
 
   template<typename _RandomAccessIter, typename _Size>
     void
     __introsort_loop(_RandomAccessIter __first, _RandomAccessIter __last,
                      _Size __depth_limit)
     {
       typedef typename iterator_traits<_RandomAccessIter>::value_type _ValueType;
 
       while (__last - __first > _M_threshold) {
         if (__depth_limit == 0) {
           partial_sort(__first, __last, __last);
           return;
         }
         --__depth_limit;
         _RandomAccessIter __cut =
           __unguarded_partition(__first, __last,
                                 _ValueType(__median(*__first,
                                                     *(__first + (__last - __first)/2),
                                                     *(__last - 1))));
         __introsort_loop(__cut, __last, __depth_limit);
         __last = __cut;
       }
     }
 
 
 
 
 
 
   template<typename _RandomAccessIter, typename _Size, typename _Compare>
     void
     __introsort_loop(_RandomAccessIter __first, _RandomAccessIter __last,
                      _Size __depth_limit, _Compare __comp)
     {
       typedef typename iterator_traits<_RandomAccessIter>::value_type _ValueType;
 
       while (__last - __first > _M_threshold) {
         if (__depth_limit == 0) {
           partial_sort(__first, __last, __last, __comp);
           return;
         }
         --__depth_limit;
         _RandomAccessIter __cut =
           __unguarded_partition(__first, __last,
                                 _ValueType(__median(*__first,
                                                     *(__first + (__last - __first)/2),
                                                     *(__last - 1), __comp)),
            __comp);
         __introsort_loop(__cut, __last, __depth_limit, __comp);
         __last = __cut;
       }
     }
 # 2166 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _RandomAccessIter>
     inline void
     sort(_RandomAccessIter __first, _RandomAccessIter __last)
     {
       typedef typename iterator_traits<_RandomAccessIter>::value_type _ValueType;
 
 
      
 
      
 
       if (__first != __last) {
         __introsort_loop(__first, __last, __lg(__last - __first) * 2);
         __final_insertion_sort(__first, __last);
       }
     }
 # 2197 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _RandomAccessIter, typename _Compare>
     inline void
     sort(_RandomAccessIter __first, _RandomAccessIter __last, _Compare __comp)
     {
       typedef typename iterator_traits<_RandomAccessIter>::value_type _ValueType;
 
 
      
 
      
 
       if (__first != __last) {
         __introsort_loop(__first, __last, __lg(__last - __first) * 2, __comp);
         __final_insertion_sort(__first, __last, __comp);
       }
     }
 
 
 
 
 
 
 
   template<typename _RandomAccessIter>
     void
     __inplace_stable_sort(_RandomAccessIter __first, _RandomAccessIter __last)
     {
       if (__last - __first < 15) {
         __insertion_sort(__first, __last);
         return;
       }
       _RandomAccessIter __middle = __first + (__last - __first) / 2;
       __inplace_stable_sort(__first, __middle);
       __inplace_stable_sort(__middle, __last);
       __merge_without_buffer(__first, __middle, __last,
                              __middle - __first,
                              __last - __middle);
     }
 
 
 
 
 
 
   template<typename _RandomAccessIter, typename _Compare>
     void
     __inplace_stable_sort(_RandomAccessIter __first, _RandomAccessIter __last,
                           _Compare __comp)
     {
       if (__last - __first < 15) {
         __insertion_sort(__first, __last, __comp);
         return;
       }
       _RandomAccessIter __middle = __first + (__last - __first) / 2;
       __inplace_stable_sort(__first, __middle, __comp);
       __inplace_stable_sort(__middle, __last, __comp);
       __merge_without_buffer(__first, __middle, __last,
                              __middle - __first,
                              __last - __middle,
                              __comp);
     }
 
   template<typename _RandomAccessIter1, typename _RandomAccessIter2,
            typename _Distance>
     void
     __merge_sort_loop(_RandomAccessIter1 __first, _RandomAccessIter1 __last,
                       _RandomAccessIter2 __result, _Distance __step_size)
     {
       _Distance __two_step = 2 * __step_size;
 
       while (__last - __first >= __two_step) {
         __result = merge(__first, __first + __step_size,
                          __first + __step_size, __first + __two_step,
                          __result);
         __first += __two_step;
       }
 
       __step_size = min(_Distance(__last - __first), __step_size);
       merge(__first, __first + __step_size, __first + __step_size, __last,
             __result);
     }
 
   template<typename _RandomAccessIter1, typename _RandomAccessIter2,
            typename _Distance, typename _Compare>
     void
     __merge_sort_loop(_RandomAccessIter1 __first, _RandomAccessIter1 __last,
                       _RandomAccessIter2 __result, _Distance __step_size,
                       _Compare __comp)
     {
       _Distance __two_step = 2 * __step_size;
 
       while (__last - __first >= __two_step) {
         __result = merge(__first, __first + __step_size,
                          __first + __step_size, __first + __two_step,
                          __result,
                          __comp);
         __first += __two_step;
       }
       __step_size = min(_Distance(__last - __first), __step_size);
 
       merge(__first, __first + __step_size,
             __first + __step_size, __last,
             __result,
             __comp);
     }
 
   enum { _M_chunk_size = 7 };
 
   template<typename _RandomAccessIter, typename _Distance>
     void
     __chunk_insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last,
                            _Distance __chunk_size)
     {
       while (__last - __first >= __chunk_size) {
         __insertion_sort(__first, __first + __chunk_size);
         __first += __chunk_size;
       }
       __insertion_sort(__first, __last);
     }
 
   template<typename _RandomAccessIter, typename _Distance, typename _Compare>
     void
     __chunk_insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last,
                            _Distance __chunk_size, _Compare __comp)
     {
       while (__last - __first >= __chunk_size) {
         __insertion_sort(__first, __first + __chunk_size, __comp);
         __first += __chunk_size;
       }
       __insertion_sort(__first, __last, __comp);
     }
 
   template<typename _RandomAccessIter, typename _Pointer>
     void
     __merge_sort_with_buffer(_RandomAccessIter __first, _RandomAccessIter __last,
                              _Pointer __buffer)
     {
       typedef typename iterator_traits<_RandomAccessIter>::difference_type _Distance;
 
       _Distance __len = __last - __first;
       _Pointer __buffer_last = __buffer + __len;
 
       _Distance __step_size = _M_chunk_size;
       __chunk_insertion_sort(__first, __last, __step_size);
 
       while (__step_size < __len) {
         __merge_sort_loop(__first, __last, __buffer, __step_size);
         __step_size *= 2;
         __merge_sort_loop(__buffer, __buffer_last, __first, __step_size);
         __step_size *= 2;
       }
     }
 
   template<typename _RandomAccessIter, typename _Pointer, typename _Compare>
     void
     __merge_sort_with_buffer(_RandomAccessIter __first, _RandomAccessIter __last,
                              _Pointer __buffer, _Compare __comp)
     {
       typedef typename iterator_traits<_RandomAccessIter>::difference_type _Distance;
 
       _Distance __len = __last - __first;
       _Pointer __buffer_last = __buffer + __len;
 
       _Distance __step_size = _M_chunk_size;
       __chunk_insertion_sort(__first, __last, __step_size, __comp);
 
       while (__step_size < __len) {
         __merge_sort_loop(__first, __last, __buffer, __step_size, __comp);
         __step_size *= 2;
         __merge_sort_loop(__buffer, __buffer_last, __first, __step_size, __comp);
         __step_size *= 2;
       }
     }
 
   template<typename _RandomAccessIter, typename _Pointer, typename _Distance>
     void
     __stable_sort_adaptive(_RandomAccessIter __first, _RandomAccessIter __last,
                            _Pointer __buffer, _Distance __buffer_size)
     {
       _Distance __len = (__last - __first + 1) / 2;
       _RandomAccessIter __middle = __first + __len;
       if (__len > __buffer_size) {
         __stable_sort_adaptive(__first, __middle, __buffer, __buffer_size);
         __stable_sort_adaptive(__middle, __last, __buffer, __buffer_size);
       }
       else {
         __merge_sort_with_buffer(__first, __middle, __buffer);
         __merge_sort_with_buffer(__middle, __last, __buffer);
       }
       __merge_adaptive(__first, __middle, __last, _Distance(__middle - __first),
                        _Distance(__last - __middle), __buffer, __buffer_size);
     }
 
   template<typename _RandomAccessIter, typename _Pointer, typename _Distance,
            typename _Compare>
     void
     __stable_sort_adaptive(_RandomAccessIter __first, _RandomAccessIter __last,
                            _Pointer __buffer, _Distance __buffer_size,
                            _Compare __comp)
     {
       _Distance __len = (__last - __first + 1) / 2;
       _RandomAccessIter __middle = __first + __len;
       if (__len > __buffer_size) {
         __stable_sort_adaptive(__first, __middle, __buffer, __buffer_size,
                                __comp);
         __stable_sort_adaptive(__middle, __last, __buffer, __buffer_size,
                                __comp);
       }
       else {
         __merge_sort_with_buffer(__first, __middle, __buffer, __comp);
         __merge_sort_with_buffer(__middle, __last, __buffer, __comp);
       }
       __merge_adaptive(__first, __middle, __last, _Distance(__middle - __first),
                        _Distance(__last - __middle), __buffer, __buffer_size,
                        __comp);
     }
 # 2430 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _RandomAccessIter>
     inline void
     stable_sort(_RandomAccessIter __first, _RandomAccessIter __last)
     {
       typedef typename iterator_traits<_RandomAccessIter>::value_type _ValueType;
       typedef typename iterator_traits<_RandomAccessIter>::difference_type _DistanceType;
 
 
      
 
      
 
       _Temporary_buffer<_RandomAccessIter, _ValueType> buf(__first, __last);
       if (buf.begin() == 0)
         __inplace_stable_sort(__first, __last);
       else
         __stable_sort_adaptive(__first, __last, buf.begin(), _DistanceType(buf.size()));
     }
 # 2466 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _RandomAccessIter, typename _Compare>
     inline void
     stable_sort(_RandomAccessIter __first, _RandomAccessIter __last, _Compare __comp)
     {
       typedef typename iterator_traits<_RandomAccessIter>::value_type _ValueType;
       typedef typename iterator_traits<_RandomAccessIter>::difference_type _DistanceType;
 
 
      
 
      
 
 
       _Temporary_buffer<_RandomAccessIter, _ValueType> buf(__first, __last);
       if (buf.begin() == 0)
         __inplace_stable_sort(__first, __last, __comp);
       else
         __stable_sort_adaptive(__first, __last, buf.begin(), _DistanceType(buf.size()),
                                __comp);
     }
 # 2502 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _RandomAccessIter>
     void
     partial_sort(_RandomAccessIter __first,
                  _RandomAccessIter __middle,
                  _RandomAccessIter __last)
     {
       typedef typename iterator_traits<_RandomAccessIter>::value_type _ValueType;
 
 
      
 
      
 
       make_heap(__first, __middle);
       for (_RandomAccessIter __i = __middle; __i < __last; ++__i)
         if (*__i < *__first)
           __pop_heap(__first, __middle, __i, _ValueType(*__i));
       sort_heap(__first, __middle);
     }
 # 2540 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _RandomAccessIter, typename _Compare>
     void
     partial_sort(_RandomAccessIter __first,
                  _RandomAccessIter __middle,
                  _RandomAccessIter __last,
                  _Compare __comp)
     {
       typedef typename iterator_traits<_RandomAccessIter>::value_type _ValueType;
 
 
      
 
      
 
 
       make_heap(__first, __middle, __comp);
       for (_RandomAccessIter __i = __middle; __i < __last; ++__i)
         if (__comp(*__i, *__first))
           __pop_heap(__first, __middle, __i, _ValueType(*__i), __comp);
       sort_heap(__first, __middle, __comp);
     }
 # 2579 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter, typename _RandomAccessIter>
     _RandomAccessIter
     partial_sort_copy(_InputIter __first, _InputIter __last,
                       _RandomAccessIter __result_first,
                       _RandomAccessIter __result_last)
     {
       typedef typename iterator_traits<_InputIter>::value_type _InputValueType;
       typedef typename iterator_traits<_RandomAccessIter>::value_type _OutputValueType;
       typedef typename iterator_traits<_RandomAccessIter>::difference_type _DistanceType;
 
 
      
      
      
      
 
       if (__result_first == __result_last) return __result_last;
       _RandomAccessIter __result_real_last = __result_first;
       while(__first != __last && __result_real_last != __result_last) {
         *__result_real_last = *__first;
         ++__result_real_last;
         ++__first;
       }
       make_heap(__result_first, __result_real_last);
       while (__first != __last) {
         if (*__first < *__result_first)
           __adjust_heap(__result_first, _DistanceType(0),
                         _DistanceType(__result_real_last - __result_first),
                         _InputValueType(*__first));
         ++__first;
       }
       sort_heap(__result_first, __result_real_last);
       return __result_real_last;
     }
 # 2633 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter, typename _RandomAccessIter, typename _Compare>
     _RandomAccessIter
     partial_sort_copy(_InputIter __first, _InputIter __last,
                       _RandomAccessIter __result_first,
                       _RandomAccessIter __result_last,
                       _Compare __comp)
     {
       typedef typename iterator_traits<_InputIter>::value_type _InputValueType;
       typedef typename iterator_traits<_RandomAccessIter>::value_type _OutputValueType;
       typedef typename iterator_traits<_RandomAccessIter>::difference_type _DistanceType;
 
 
      
      
      
      
 
 
       if (__result_first == __result_last) return __result_last;
       _RandomAccessIter __result_real_last = __result_first;
       while(__first != __last && __result_real_last != __result_last) {
         *__result_real_last = *__first;
         ++__result_real_last;
         ++__first;
       }
       make_heap(__result_first, __result_real_last, __comp);
       while (__first != __last) {
         if (__comp(*__first, *__result_first))
           __adjust_heap(__result_first, _DistanceType(0),
                         _DistanceType(__result_real_last - __result_first),
                         _InputValueType(*__first),
                         __comp);
         ++__first;
       }
       sort_heap(__result_first, __result_real_last, __comp);
       return __result_real_last;
     }
 # 2686 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _RandomAccessIter>
     void
     nth_element(_RandomAccessIter __first,
                 _RandomAccessIter __nth,
                 _RandomAccessIter __last)
     {
       typedef typename iterator_traits<_RandomAccessIter>::value_type _ValueType;
 
 
      
      
 
       while (__last - __first > 3) {
         _RandomAccessIter __cut =
           __unguarded_partition(__first, __last,
                                 _ValueType(__median(*__first,
                                                     *(__first + (__last - __first)/2),
                                                     *(__last - 1))));
         if (__cut <= __nth)
           __first = __cut;
         else
           __last = __cut;
       }
       __insertion_sort(__first, __last);
     }
 # 2728 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _RandomAccessIter, typename _Compare>
     void
     nth_element(_RandomAccessIter __first,
                 _RandomAccessIter __nth,
                 _RandomAccessIter __last,
                             _Compare __comp)
     {
       typedef typename iterator_traits<_RandomAccessIter>::value_type _ValueType;
 
 
      
      
 
 
       while (__last - __first > 3) {
         _RandomAccessIter __cut =
           __unguarded_partition(__first, __last,
                                 _ValueType(__median(*__first,
                                                     *(__first + (__last - __first)/2),
                                                     *(__last - 1),
                                                     __comp)),
                                 __comp);
         if (__cut <= __nth)
           __first = __cut;
         else
           __last = __cut;
       }
       __insertion_sort(__first, __last, __comp);
     }
 # 2768 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _Tp>
     _ForwardIter
     lower_bound(_ForwardIter __first, _ForwardIter __last, const _Tp& __val)
     {
       typedef typename iterator_traits<_ForwardIter>::value_type _ValueType;
       typedef typename iterator_traits<_ForwardIter>::difference_type _DistanceType;
 
 
 
 
 
 
      
      
      
 
       _DistanceType __len = distance(__first, __last);
       _DistanceType __half;
       _ForwardIter __middle;
 
       while (__len > 0) {
         __half = __len >> 1;
         __middle = __first;
         advance(__middle, __half);
         if (*__middle < __val) {
           __first = __middle;
           ++__first;
           __len = __len - __half - 1;
         }
         else
           __len = __half;
       }
       return __first;
     }
 # 2816 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _Tp, typename _Compare>
     _ForwardIter
     lower_bound(_ForwardIter __first, _ForwardIter __last,
                 const _Tp& __val, _Compare __comp)
     {
       typedef typename iterator_traits<_ForwardIter>::value_type _ValueType;
       typedef typename iterator_traits<_ForwardIter>::difference_type _DistanceType;
 
 
      
      
 
       _DistanceType __len = distance(__first, __last);
       _DistanceType __half;
       _ForwardIter __middle;
 
       while (__len > 0) {
         __half = __len >> 1;
         __middle = __first;
         advance(__middle, __half);
         if (__comp(*__middle, __val)) {
           __first = __middle;
           ++__first;
           __len = __len - __half - 1;
         }
         else
           __len = __half;
       }
       return __first;
     }
 # 2856 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _Tp>
     _ForwardIter
     upper_bound(_ForwardIter __first, _ForwardIter __last, const _Tp& __val)
     {
       typedef typename iterator_traits<_ForwardIter>::value_type _ValueType;
       typedef typename iterator_traits<_ForwardIter>::difference_type _DistanceType;
 
 
 
      
      
      
 
       _DistanceType __len = distance(__first, __last);
       _DistanceType __half;
       _ForwardIter __middle;
 
       while (__len > 0) {
         __half = __len >> 1;
         __middle = __first;
         advance(__middle, __half);
         if (__val < *__middle)
           __len = __half;
         else {
           __first = __middle;
           ++__first;
           __len = __len - __half - 1;
         }
       }
       return __first;
     }
 # 2901 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _Tp, typename _Compare>
     _ForwardIter
     upper_bound(_ForwardIter __first, _ForwardIter __last,
                 const _Tp& __val, _Compare __comp)
     {
       typedef typename iterator_traits<_ForwardIter>::value_type _ValueType;
       typedef typename iterator_traits<_ForwardIter>::difference_type _DistanceType;
 
 
      
      
 
       _DistanceType __len = distance(__first, __last);
       _DistanceType __half;
       _ForwardIter __middle;
 
       while (__len > 0) {
         __half = __len >> 1;
         __middle = __first;
         advance(__middle, __half);
         if (__comp(__val, *__middle))
           __len = __half;
         else {
           __first = __middle;
           ++__first;
           __len = __len - __half - 1;
         }
       }
       return __first;
     }
 # 2948 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _Tp>
     pair<_ForwardIter, _ForwardIter>
     equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val)
     {
       typedef typename iterator_traits<_ForwardIter>::value_type _ValueType;
       typedef typename iterator_traits<_ForwardIter>::difference_type _DistanceType;
 
 
 
      
      
      
 
       _DistanceType __len = distance(__first, __last);
       _DistanceType __half;
       _ForwardIter __middle, __left, __right;
 
       while (__len > 0) {
         __half = __len >> 1;
         __middle = __first;
         advance(__middle, __half);
         if (*__middle < __val) {
           __first = __middle;
           ++__first;
           __len = __len - __half - 1;
         }
         else if (__val < *__middle)
           __len = __half;
         else {
           __left = lower_bound(__first, __middle, __val);
           advance(__first, __len);
           __right = upper_bound(++__middle, __first, __val);
           return pair<_ForwardIter, _ForwardIter>(__left, __right);
         }
       }
       return pair<_ForwardIter, _ForwardIter>(__first, __first);
     }
 # 3003 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _Tp, typename _Compare>
     pair<_ForwardIter, _ForwardIter>
     equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,
                 _Compare __comp)
     {
       typedef typename iterator_traits<_ForwardIter>::value_type _ValueType;
       typedef typename iterator_traits<_ForwardIter>::difference_type _DistanceType;
 
 
      
      
      
 
       _DistanceType __len = distance(__first, __last);
       _DistanceType __half;
       _ForwardIter __middle, __left, __right;
 
       while (__len > 0) {
         __half = __len >> 1;
         __middle = __first;
         advance(__middle, __half);
         if (__comp(*__middle, __val)) {
           __first = __middle;
           ++__first;
           __len = __len - __half - 1;
         }
         else if (__comp(__val, *__middle))
           __len = __half;
         else {
           __left = lower_bound(__first, __middle, __val, __comp);
           advance(__first, __len);
           __right = upper_bound(++__middle, __first, __val, __comp);
           return pair<_ForwardIter, _ForwardIter>(__left, __right);
         }
       }
       return pair<_ForwardIter, _ForwardIter>(__first, __first);
     }
 # 3052 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _Tp>
     bool
     binary_search(_ForwardIter __first, _ForwardIter __last,
                   const _Tp& __val)
     {
 
 
      
      
 
      
 
       _ForwardIter __i = lower_bound(__first, __last, __val);
       return __i != __last && !(__val < *__i);
     }
 # 3083 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter, typename _Tp, typename _Compare>
     bool
     binary_search(_ForwardIter __first, _ForwardIter __last,
                   const _Tp& __val, _Compare __comp)
     {
 
      
      
 
      
 
 
       _ForwardIter __i = lower_bound(__first, __last, __val, __comp);
       return __i != __last && !__comp(__val, *__i);
     }
 # 3115 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter1, typename _InputIter2, typename _OutputIter>
     _OutputIter
     merge(_InputIter1 __first1, _InputIter1 __last1,
           _InputIter2 __first2, _InputIter2 __last2,
           _OutputIter __result)
     {
 
      
      
      
 
      
 
 
      
 
 
       while (__first1 != __last1 && __first2 != __last2) {
         if (*__first2 < *__first1) {
           *__result = *__first2;
           ++__first2;
         }
         else {
           *__result = *__first1;
           ++__first1;
         }
         ++__result;
       }
       return copy(__first2, __last2, copy(__first1, __last1, __result));
     }
 # 3166 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _InputIter1, typename _InputIter2, typename _OutputIter,
            typename _Compare>
     _OutputIter
     merge(_InputIter1 __first1, _InputIter1 __last1,
           _InputIter2 __first2, _InputIter2 __last2,
           _OutputIter __result, _Compare __comp)
     {
 
      
      
      
 
 
      
 
      
 
 
 
       while (__first1 != __last1 && __first2 != __last2) {
         if (__comp(*__first2, *__first1)) {
           *__result = *__first2;
           ++__first2;
         }
         else {
           *__result = *__first1;
           ++__first1;
         }
         ++__result;
       }
       return copy(__first2, __last2, copy(__first1, __last1, __result));
     }
 
 
 
 
 
 
   template<typename _BidirectionalIter, typename _Distance>
     void
     __merge_without_buffer(_BidirectionalIter __first,
                            _BidirectionalIter __middle,
                            _BidirectionalIter __last,
                            _Distance __len1, _Distance __len2)
     {
       if (__len1 == 0 || __len2 == 0)
         return;
       if (__len1 + __len2 == 2) {
         if (*__middle < *__first)
               iter_swap(__first, __middle);
         return;
       }
       _BidirectionalIter __first_cut = __first;
       _BidirectionalIter __second_cut = __middle;
       _Distance __len11 = 0;
       _Distance __len22 = 0;
       if (__len1 > __len2) {
         __len11 = __len1 / 2;
         advance(__first_cut, __len11);
         __second_cut = lower_bound(__middle, __last, *__first_cut);
         __len22 = distance(__middle, __second_cut);
       }
       else {
         __len22 = __len2 / 2;
         advance(__second_cut, __len22);
         __first_cut = upper_bound(__first, __middle, *__second_cut);
         __len11 = distance(__first, __first_cut);
       }
       rotate(__first_cut, __middle, __second_cut);
       _BidirectionalIter __new_middle = __first_cut;
       advance(__new_middle, distance(__middle, __second_cut));
       __merge_without_buffer(__first, __first_cut, __new_middle,
                              __len11, __len22);
       __merge_without_buffer(__new_middle, __second_cut, __last,
                              __len1 - __len11, __len2 - __len22);
     }
 
 
 
 
 
 
   template<typename _BidirectionalIter, typename _Distance, typename _Compare>
     void
     __merge_without_buffer(_BidirectionalIter __first,
                            _BidirectionalIter __middle,
                            _BidirectionalIter __last,
                            _Distance __len1, _Distance __len2,
                            _Compare __comp)
     {
       if (__len1 == 0 || __len2 == 0)
         return;
       if (__len1 + __len2 == 2) {
         if (__comp(*__middle, *__first))
               iter_swap(__first, __middle);
         return;
       }
       _BidirectionalIter __first_cut = __first;
       _BidirectionalIter __second_cut = __middle;
       _Distance __len11 = 0;
       _Distance __len22 = 0;
       if (__len1 > __len2) {
         __len11 = __len1 / 2;
         advance(__first_cut, __len11);
         __second_cut = lower_bound(__middle, __last, *__first_cut, __comp);
         __len22 = distance(__middle, __second_cut);
       }
       else {
         __len22 = __len2 / 2;
         advance(__second_cut, __len22);
         __first_cut = upper_bound(__first, __middle, *__second_cut, __comp);
         __len11 = distance(__first, __first_cut);
       }
       rotate(__first_cut, __middle, __second_cut);
       _BidirectionalIter __new_middle = __first_cut;
       advance(__new_middle, distance(__middle, __second_cut));
       __merge_without_buffer(__first, __first_cut, __new_middle,
                              __len11, __len22, __comp);
       __merge_without_buffer(__new_middle, __second_cut, __last,
                              __len1 - __len11, __len2 - __len22, __comp);
     }
 
 
 
 
 
 
   template<typename _BidirectionalIter1, typename _BidirectionalIter2,
            typename _Distance>
     _BidirectionalIter1
     __rotate_adaptive(_BidirectionalIter1 __first,
                       _BidirectionalIter1 __middle,
                       _BidirectionalIter1 __last,
                       _Distance __len1, _Distance __len2,
                       _BidirectionalIter2 __buffer,
                       _Distance __buffer_size)
     {
       _BidirectionalIter2 __buffer_end;
       if (__len1 > __len2 && __len2 <= __buffer_size) {
         __buffer_end = copy(__middle, __last, __buffer);
         copy_backward(__first, __middle, __last);
         return copy(__buffer, __buffer_end, __first);
       }
       else if (__len1 <= __buffer_size) {
         __buffer_end = copy(__first, __middle, __buffer);
         copy(__middle, __last, __first);
         return copy_backward(__buffer, __buffer_end, __last);
       }
       else {
         rotate(__first, __middle, __last);
         advance(__first, distance(__middle, __last));
         return __first;
       }
     }
 
 
 
 
 
 
   template<typename _BidirectionalIter1, typename _BidirectionalIter2,
            typename _BidirectionalIter3>
     _BidirectionalIter3
     __merge_backward(_BidirectionalIter1 __first1, _BidirectionalIter1 __last1,
                      _BidirectionalIter2 __first2, _BidirectionalIter2 __last2,
                      _BidirectionalIter3 __result)
     {
       if (__first1 == __last1)
         return copy_backward(__first2, __last2, __result);
       if (__first2 == __last2)
         return copy_backward(__first1, __last1, __result);
       --__last1;
       --__last2;
       while (true) {
         if (*__last2 < *__last1) {
           *--__result = *__last1;
           if (__first1 == __last1)
             return copy_backward(__first2, ++__last2, __result);
           --__last1;
         }
         else {
           *--__result = *__last2;
           if (__first2 == __last2)
             return copy_backward(__first1, ++__last1, __result);
           --__last2;
         }
       }
     }
 
 
 
 
 
 
   template<typename _BidirectionalIter1, typename _BidirectionalIter2,
            typename _BidirectionalIter3, typename _Compare>
     _BidirectionalIter3
     __merge_backward(_BidirectionalIter1 __first1, _BidirectionalIter1 __last1,
                      _BidirectionalIter2 __first2, _BidirectionalIter2 __last2,
                      _BidirectionalIter3 __result,
                      _Compare __comp)
     {
       if (__first1 == __last1)
         return copy_backward(__first2, __last2, __result);
       if (__first2 == __last2)
         return copy_backward(__first1, __last1, __result);
       --__last1;
       --__last2;
       while (true) {
         if (__comp(*__last2, *__last1)) {
           *--__result = *__last1;
           if (__first1 == __last1)
             return copy_backward(__first2, ++__last2, __result);
           --__last1;
         }
         else {
           *--__result = *__last2;
           if (__first2 == __last2)
             return copy_backward(__first1, ++__last1, __result);
           --__last2;
         }
       }
     }
 
 
 
 
 
 
   template<typename _BidirectionalIter, typename _Distance, typename _Pointer>
     void
     __merge_adaptive(_BidirectionalIter __first,
                      _BidirectionalIter __middle,
                      _BidirectionalIter __last,
                      _Distance __len1, _Distance __len2,
                      _Pointer __buffer, _Distance __buffer_size)
     {
           if (__len1 <= __len2 && __len1 <= __buffer_size) {
             _Pointer __buffer_end = copy(__first, __middle, __buffer);
             merge(__buffer, __buffer_end, __middle, __last, __first);
           }
           else if (__len2 <= __buffer_size) {
             _Pointer __buffer_end = copy(__middle, __last, __buffer);
             __merge_backward(__first, __middle, __buffer, __buffer_end, __last);
           }
           else {
             _BidirectionalIter __first_cut = __first;
             _BidirectionalIter __second_cut = __middle;
             _Distance __len11 = 0;
             _Distance __len22 = 0;
             if (__len1 > __len2) {
                   __len11 = __len1 / 2;
                   advance(__first_cut, __len11);
                   __second_cut = lower_bound(__middle, __last, *__first_cut);
                   __len22 = distance(__middle, __second_cut);
             }
             else {
                   __len22 = __len2 / 2;
                   advance(__second_cut, __len22);
                   __first_cut = upper_bound(__first, __middle, *__second_cut);
                   __len11 = distance(__first, __first_cut);
             }
             _BidirectionalIter __new_middle =
                   __rotate_adaptive(__first_cut, __middle, __second_cut,
                                     __len1 - __len11, __len22, __buffer,
                                     __buffer_size);
             __merge_adaptive(__first, __first_cut, __new_middle, __len11,
                              __len22, __buffer, __buffer_size);
             __merge_adaptive(__new_middle, __second_cut, __last, __len1 - __len11,
                              __len2 - __len22, __buffer, __buffer_size);
           }
     }
 
 
 
 
 
 
   template<typename _BidirectionalIter, typename _Distance, typename _Pointer,
            typename _Compare>
     void
     __merge_adaptive(_BidirectionalIter __first,
                      _BidirectionalIter __middle,
                      _BidirectionalIter __last,
                      _Distance __len1, _Distance __len2,
                      _Pointer __buffer, _Distance __buffer_size,
                      _Compare __comp)
     {
           if (__len1 <= __len2 && __len1 <= __buffer_size) {
             _Pointer __buffer_end = copy(__first, __middle, __buffer);
             merge(__buffer, __buffer_end, __middle, __last, __first, __comp);
           }
           else if (__len2 <= __buffer_size) {
             _Pointer __buffer_end = copy(__middle, __last, __buffer);
             __merge_backward(__first, __middle, __buffer, __buffer_end, __last,
                                              __comp);
           }
           else {
             _BidirectionalIter __first_cut = __first;
             _BidirectionalIter __second_cut = __middle;
             _Distance __len11 = 0;
             _Distance __len22 = 0;
             if (__len1 > __len2) {
                   __len11 = __len1 / 2;
                   advance(__first_cut, __len11);
                   __second_cut = lower_bound(__middle, __last, *__first_cut, __comp);
                   __len22 = distance(__middle, __second_cut);
             }
             else {
                   __len22 = __len2 / 2;
                   advance(__second_cut, __len22);
                   __first_cut = upper_bound(__first, __middle, *__second_cut, __comp);
                   __len11 = distance(__first, __first_cut);
             }
             _BidirectionalIter __new_middle =
                   __rotate_adaptive(__first_cut, __middle, __second_cut,
                                     __len1 - __len11, __len22, __buffer,
                                     __buffer_size);
             __merge_adaptive(__first, __first_cut, __new_middle, __len11,
                              __len22, __buffer, __buffer_size, __comp);
             __merge_adaptive(__new_middle, __second_cut, __last, __len1 - __len11,
                              __len2 - __len22, __buffer, __buffer_size, __comp);
           }
     }
 # 3508 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _BidirectionalIter>
     void
     inplace_merge(_BidirectionalIter __first,
                   _BidirectionalIter __middle,
                   _BidirectionalIter __last)
     {
       typedef typename iterator_traits<_BidirectionalIter>::value_type
           _ValueType;
       typedef typename iterator_traits<_BidirectionalIter>::difference_type
           _DistanceType;
 
 
      
 
      
 
       if (__first == __middle || __middle == __last)
         return;
 
       _DistanceType __len1 = distance(__first, __middle);
       _DistanceType __len2 = distance(__middle, __last);
 
       _Temporary_buffer<_BidirectionalIter, _ValueType> __buf(__first, __last);
       if (__buf.begin() == 0)
         __merge_without_buffer(__first, __middle, __last, __len1, __len2);
       else
         __merge_adaptive(__first, __middle, __last, __len1, __len2,
                          __buf.begin(), _DistanceType(__buf.size()));
     }
 # 3559 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _BidirectionalIter, typename _Compare>
     void
     inplace_merge(_BidirectionalIter __first,
                   _BidirectionalIter __middle,
                   _BidirectionalIter __last,
                   _Compare __comp)
     {
       typedef typename iterator_traits<_BidirectionalIter>::value_type
           _ValueType;
       typedef typename iterator_traits<_BidirectionalIter>::difference_type
           _DistanceType;
 
 
      
 
      
 
 
       if (__first == __middle || __middle == __last)
         return;
 
       _DistanceType __len1 = distance(__first, __middle);
       _DistanceType __len2 = distance(__middle, __last);
 
       _Temporary_buffer<_BidirectionalIter, _ValueType> __buf(__first, __last);
       if (__buf.begin() == 0)
         __merge_without_buffer(__first, __middle, __last, __len1, __len2, __comp);
       else
         __merge_adaptive(__first, __middle, __last, __len1, __len2,
                          __buf.begin(), _DistanceType(__buf.size()),
                          __comp);
     }
 
 
 
 
 
 
   template<typename _InputIter1, typename _InputIter2>
     bool
     includes(_InputIter1 __first1, _InputIter1 __last1,
              _InputIter2 __first2, _InputIter2 __last2)
     {
 
      
      
      
 
 
      
 
 
       while (__first1 != __last1 && __first2 != __last2)
         if (*__first2 < *__first1)
           return false;
         else if(*__first1 < *__first2)
           ++__first1;
         else
           ++__first1, ++__first2;
 
       return __first2 == __last2;
     }
 
   template<typename _InputIter1, typename _InputIter2, typename _Compare>
     bool
     includes(_InputIter1 __first1, _InputIter1 __last1,
              _InputIter2 __first2, _InputIter2 __last2, _Compare __comp)
     {
 
      
      
      
 
 
      
 
 
 
       while (__first1 != __last1 && __first2 != __last2)
         if (__comp(*__first2, *__first1))
           return false;
         else if(__comp(*__first1, *__first2))
           ++__first1;
         else
           ++__first1, ++__first2;
 
       return __first2 == __last2;
     }
 
   template<typename _InputIter1, typename _InputIter2, typename _OutputIter>
     _OutputIter
     set_union(_InputIter1 __first1, _InputIter1 __last1,
               _InputIter2 __first2, _InputIter2 __last2,
               _OutputIter __result)
     {
 
      
      
      
 
      
 
 
      
 
 
       while (__first1 != __last1 && __first2 != __last2) {
         if (*__first1 < *__first2) {
           *__result = *__first1;
           ++__first1;
         }
         else if (*__first2 < *__first1) {
           *__result = *__first2;
           ++__first2;
         }
         else {
           *__result = *__first1;
           ++__first1;
           ++__first2;
         }
         ++__result;
       }
       return copy(__first2, __last2, copy(__first1, __last1, __result));
     }
 
   template<typename _InputIter1, typename _InputIter2, typename _OutputIter,
            typename _Compare>
     _OutputIter
     set_union(_InputIter1 __first1, _InputIter1 __last1,
               _InputIter2 __first2, _InputIter2 __last2,
               _OutputIter __result, _Compare __comp)
     {
 
      
      
      
 
 
      
 
      
 
 
 
       while (__first1 != __last1 && __first2 != __last2) {
         if (__comp(*__first1, *__first2)) {
           *__result = *__first1;
           ++__first1;
         }
         else if (__comp(*__first2, *__first1)) {
           *__result = *__first2;
           ++__first2;
         }
         else {
           *__result = *__first1;
           ++__first1;
           ++__first2;
         }
         ++__result;
       }
       return copy(__first2, __last2, copy(__first1, __last1, __result));
     }
 
   template<typename _InputIter1, typename _InputIter2, typename _OutputIter>
     _OutputIter
     set_intersection(_InputIter1 __first1, _InputIter1 __last1,
                      _InputIter2 __first2, _InputIter2 __last2,
                      _OutputIter __result)
     {
 
      
      
      
 
      
 
 
      
 
 
       while (__first1 != __last1 && __first2 != __last2)
         if (*__first1 < *__first2)
           ++__first1;
         else if (*__first2 < *__first1)
           ++__first2;
         else {
           *__result = *__first1;
           ++__first1;
           ++__first2;
           ++__result;
         }
       return __result;
     }
 
   template<typename _InputIter1, typename _InputIter2, typename _OutputIter,
            typename _Compare>
     _OutputIter
     set_intersection(_InputIter1 __first1, _InputIter1 __last1,
                      _InputIter2 __first2, _InputIter2 __last2,
                      _OutputIter __result, _Compare __comp)
     {
 
      
      
      
 
 
      
 
      
 
 
 
       while (__first1 != __last1 && __first2 != __last2)
         if (__comp(*__first1, *__first2))
           ++__first1;
         else if (__comp(*__first2, *__first1))
           ++__first2;
         else {
           *__result = *__first1;
           ++__first1;
           ++__first2;
           ++__result;
         }
       return __result;
     }
 
   template<typename _InputIter1, typename _InputIter2, typename _OutputIter>
     _OutputIter
     set_difference(_InputIter1 __first1, _InputIter1 __last1,
                    _InputIter2 __first2, _InputIter2 __last2,
                    _OutputIter __result)
     {
 
      
      
      
 
      
 
 
      
 
 
       while (__first1 != __last1 && __first2 != __last2)
         if (*__first1 < *__first2) {
           *__result = *__first1;
           ++__first1;
           ++__result;
         }
         else if (*__first2 < *__first1)
           ++__first2;
         else {
           ++__first1;
           ++__first2;
         }
       return copy(__first1, __last1, __result);
     }
 
   template<typename _InputIter1, typename _InputIter2, typename _OutputIter,
            typename _Compare>
     _OutputIter
     set_difference(_InputIter1 __first1, _InputIter1 __last1,
                    _InputIter2 __first2, _InputIter2 __last2,
                    _OutputIter __result, _Compare __comp)
     {
 
      
      
      
 
 
      
 
      
 
 
 
       while (__first1 != __last1 && __first2 != __last2)
         if (__comp(*__first1, *__first2)) {
           *__result = *__first1;
           ++__first1;
           ++__result;
         }
         else if (__comp(*__first2, *__first1))
           ++__first2;
         else {
           ++__first1;
           ++__first2;
         }
       return copy(__first1, __last1, __result);
     }
 
   template<typename _InputIter1, typename _InputIter2, typename _OutputIter>
     _OutputIter
     set_symmetric_difference(_InputIter1 __first1, _InputIter1 __last1,
                              _InputIter2 __first2, _InputIter2 __last2,
                              _OutputIter __result)
     {
 
      
      
      
 
      
 
 
      
 
 
       while (__first1 != __last1 && __first2 != __last2)
         if (*__first1 < *__first2) {
           *__result = *__first1;
           ++__first1;
           ++__result;
         }
         else if (*__first2 < *__first1) {
           *__result = *__first2;
           ++__first2;
           ++__result;
         }
         else {
           ++__first1;
           ++__first2;
         }
       return copy(__first2, __last2, copy(__first1, __last1, __result));
     }
 
   template<typename _InputIter1, typename _InputIter2, typename _OutputIter,
            typename _Compare>
     _OutputIter
     set_symmetric_difference(_InputIter1 __first1, _InputIter1 __last1,
                              _InputIter2 __first2, _InputIter2 __last2,
                              _OutputIter __result,
                              _Compare __comp)
     {
 
      
      
      
 
 
      
 
      
 
 
 
       while (__first1 != __last1 && __first2 != __last2)
         if (__comp(*__first1, *__first2)) {
           *__result = *__first1;
           ++__first1;
           ++__result;
         }
         else if (__comp(*__first2, *__first1)) {
           *__result = *__first2;
           ++__first2;
           ++__result;
         }
         else {
           ++__first1;
           ++__first2;
         }
       return copy(__first2, __last2, copy(__first1, __last1, __result));
     }
 
 
 
 
   template<typename _ForwardIter>
     _ForwardIter
     max_element(_ForwardIter __first, _ForwardIter __last)
     {
 
      
      
 
 
       if (__first == __last) return __first;
       _ForwardIter __result = __first;
       while (++__first != __last)
         if (*__result < *__first)
           __result = __first;
       return __result;
     }
 
   template<typename _ForwardIter, typename _Compare>
     _ForwardIter
     max_element(_ForwardIter __first, _ForwardIter __last,
                 _Compare __comp)
     {
 
      
      
 
 
 
       if (__first == __last) return __first;
       _ForwardIter __result = __first;
       while (++__first != __last)
         if (__comp(*__result, *__first)) __result = __first;
       return __result;
     }
 
   template<typename _ForwardIter>
     _ForwardIter
     min_element(_ForwardIter __first, _ForwardIter __last)
     {
 
      
      
 
 
       if (__first == __last) return __first;
       _ForwardIter __result = __first;
       while (++__first != __last)
         if (*__first < *__result)
           __result = __first;
       return __result;
     }
 
   template<typename _ForwardIter, typename _Compare>
     _ForwardIter
     min_element(_ForwardIter __first, _ForwardIter __last,
                 _Compare __comp)
     {
 
      
      
 
 
 
       if (__first == __last) return __first;
       _ForwardIter __result = __first;
       while (++__first != __last)
         if (__comp(*__first, *__result))
           __result = __first;
       return __result;
     }
 
 
 
 
   template<typename _BidirectionalIter>
     bool
     next_permutation(_BidirectionalIter __first, _BidirectionalIter __last)
     {
 
      
      
 
 
       if (__first == __last)
         return false;
       _BidirectionalIter __i = __first;
       ++__i;
       if (__i == __last)
         return false;
       __i = __last;
       --__i;
 
       for(;;) {
         _BidirectionalIter __ii = __i;
         --__i;
         if (*__i < *__ii) {
           _BidirectionalIter __j = __last;
           while (!(*__i < *--__j))
             {}
           iter_swap(__i, __j);
           reverse(__ii, __last);
           return true;
         }
         if (__i == __first) {
           reverse(__first, __last);
           return false;
         }
       }
     }
 
   template<typename _BidirectionalIter, typename _Compare>
     bool
     next_permutation(_BidirectionalIter __first, _BidirectionalIter __last,
                      _Compare __comp)
     {
 
      
      
 
 
 
       if (__first == __last)
         return false;
       _BidirectionalIter __i = __first;
       ++__i;
       if (__i == __last)
         return false;
       __i = __last;
       --__i;
 
       for(;;) {
         _BidirectionalIter __ii = __i;
         --__i;
         if (__comp(*__i, *__ii)) {
           _BidirectionalIter __j = __last;
           while (!__comp(*__i, *--__j))
             {}
           iter_swap(__i, __j);
           reverse(__ii, __last);
           return true;
         }
         if (__i == __first) {
           reverse(__first, __last);
           return false;
         }
       }
     }
 
   template<typename _BidirectionalIter>
     bool
     prev_permutation(_BidirectionalIter __first, _BidirectionalIter __last)
     {
 
      
      
 
 
       if (__first == __last)
         return false;
       _BidirectionalIter __i = __first;
       ++__i;
       if (__i == __last)
         return false;
       __i = __last;
       --__i;
 
       for(;;) {
         _BidirectionalIter __ii = __i;
         --__i;
         if (*__ii < *__i) {
           _BidirectionalIter __j = __last;
           while (!(*--__j < *__i))
             {}
           iter_swap(__i, __j);
           reverse(__ii, __last);
           return true;
         }
         if (__i == __first) {
           reverse(__first, __last);
           return false;
         }
       }
     }
 
   template<typename _BidirectionalIter, typename _Compare>
     bool
     prev_permutation(_BidirectionalIter __first, _BidirectionalIter __last,
                      _Compare __comp)
     {
 
      
      
 
 
 
       if (__first == __last)
         return false;
       _BidirectionalIter __i = __first;
       ++__i;
       if (__i == __last)
         return false;
       __i = __last;
       --__i;
 
       for(;;) {
         _BidirectionalIter __ii = __i;
         --__i;
         if (__comp(*__ii, *__i)) {
           _BidirectionalIter __j = __last;
           while (!__comp(*--__j, *__i))
             {}
           iter_swap(__i, __j);
           reverse(__ii, __last);
           return true;
         }
         if (__i == __first) {
           reverse(__first, __last);
           return false;
         }
       }
     }
 
 
 
   template<typename _InputIter, typename _ForwardIter>
     _InputIter
     find_first_of(_InputIter __first1, _InputIter __last1,
                   _ForwardIter __first2, _ForwardIter __last2)
     {
 
      
      
      
 
 
 
       for ( ; __first1 != __last1; ++__first1)
         for (_ForwardIter __iter = __first2; __iter != __last2; ++__iter)
           if (*__first1 == *__iter)
             return __first1;
       return __last1;
     }
 
   template<typename _InputIter, typename _ForwardIter, typename _BinaryPredicate>
     _InputIter
     find_first_of(_InputIter __first1, _InputIter __last1,
                   _ForwardIter __first2, _ForwardIter __last2,
                   _BinaryPredicate __comp)
     {
 
      
      
      
 
 
      
 
 
 
       for ( ; __first1 != __last1; ++__first1)
         for (_ForwardIter __iter = __first2; __iter != __last2; ++__iter)
           if (__comp(*__first1, *__iter))
             return __first1;
       return __last1;
     }
 # 4201 "/usr/include/c++/3.2/bits/stl_algo.h" 3
   template<typename _ForwardIter1, typename _ForwardIter2>
     _ForwardIter1
     __find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
                _ForwardIter2 __first2, _ForwardIter2 __last2,
                forward_iterator_tag, forward_iterator_tag)
     {
       if (__first2 == __last2)
         return __last1;
       else {
         _ForwardIter1 __result = __last1;
         while (1) {
           _ForwardIter1 __new_result
             = search(__first1, __last1, __first2, __last2);
           if (__new_result == __last1)
             return __result;
           else {
             __result = __new_result;
             __first1 = __new_result;
             ++__first1;
           }
         }
       }
     }
 
   template<typename _ForwardIter1, typename _ForwardIter2,
            typename _BinaryPredicate>
     _ForwardIter1
     __find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
                _ForwardIter2 __first2, _ForwardIter2 __last2,
                forward_iterator_tag, forward_iterator_tag,
                _BinaryPredicate __comp)
     {
       if (__first2 == __last2)
         return __last1;
       else {
         _ForwardIter1 __result = __last1;
         while (1) {
           _ForwardIter1 __new_result
             = search(__first1, __last1, __first2, __last2, __comp);
           if (__new_result == __last1)
             return __result;
           else {
             __result = __new_result;
             __first1 = __new_result;
             ++__first1;
           }
         }
       }
     }
 
 
   template<typename _BidirectionalIter1, typename _BidirectionalIter2>
     _BidirectionalIter1
     __find_end(_BidirectionalIter1 __first1, _BidirectionalIter1 __last1,
                _BidirectionalIter2 __first2, _BidirectionalIter2 __last2,
                bidirectional_iterator_tag, bidirectional_iterator_tag)
     {
 
      
      
 
       typedef reverse_iterator<_BidirectionalIter1> _RevIter1;
       typedef reverse_iterator<_BidirectionalIter2> _RevIter2;
 
       _RevIter1 __rlast1(__first1);
       _RevIter2 __rlast2(__first2);
       _RevIter1 __rresult = search(_RevIter1(__last1), __rlast1,
                                    _RevIter2(__last2), __rlast2);
 
       if (__rresult == __rlast1)
         return __last1;
       else {
         _BidirectionalIter1 __result = __rresult.base();
         advance(__result, -distance(__first2, __last2));
         return __result;
       }
     }
 
   template<typename _BidirectionalIter1, typename _BidirectionalIter2,
            typename _BinaryPredicate>
     _BidirectionalIter1
     __find_end(_BidirectionalIter1 __first1, _BidirectionalIter1 __last1,
                _BidirectionalIter2 __first2, _BidirectionalIter2 __last2,
                bidirectional_iterator_tag, bidirectional_iterator_tag,
                _BinaryPredicate __comp)
     {
 
      
      
 
       typedef reverse_iterator<_BidirectionalIter1> _RevIter1;
       typedef reverse_iterator<_BidirectionalIter2> _RevIter2;
 
       _RevIter1 __rlast1(__first1);
       _RevIter2 __rlast2(__first2);
       _RevIter1 __rresult = search(_RevIter1(__last1), __rlast1,
                                    _RevIter2(__last2), __rlast2,
                                    __comp);
 
       if (__rresult == __rlast1)
         return __last1;
       else {
         _BidirectionalIter1 __result = __rresult.base();
         advance(__result, -distance(__first2, __last2));
         return __result;
       }
     }
 
 
 
   template<typename _ForwardIter1, typename _ForwardIter2>
     inline _ForwardIter1
     find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
              _ForwardIter2 __first2, _ForwardIter2 __last2)
     {
 
      
      
      
 
 
 
       return __find_end(__first1, __last1, __first2, __last2,
                         __iterator_category(__first1),
                         __iterator_category(__first2));
     }
 
   template<typename _ForwardIter1, typename _ForwardIter2,
            typename _BinaryPredicate>
     inline _ForwardIter1
     find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
              _ForwardIter2 __first2, _ForwardIter2 __last2,
              _BinaryPredicate __comp)
     {
 
      
      
      
 
 
 
       return __find_end(__first1, __last1, __first2, __last2,
                         __iterator_category(__first1),
                         __iterator_category(__first2),
                         __comp);
     }
 
 }
 # 70 "/usr/include/c++/3.2/algorithm" 2 3
 # 57 "/usr/include/c++/3.2/string" 2 3
 # 1 "/usr/include/c++/3.2/bits/basic_string.tcc" 1 3
 # 45 "/usr/include/c++/3.2/bits/basic_string.tcc" 3
 
 namespace std
 {
   template<typename _CharT, typename _Traits, typename _Alloc>
     const typename basic_string<_CharT, _Traits, _Alloc>::size_type
     basic_string<_CharT, _Traits, _Alloc>::
     _Rep::_S_max_size = (((npos - sizeof(_Rep))/sizeof(_CharT)) - 1) / 4;
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     const _CharT
     basic_string<_CharT, _Traits, _Alloc>::
     _Rep::_S_terminal = _CharT();
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     const typename basic_string<_CharT, _Traits, _Alloc>::size_type
     basic_string<_CharT, _Traits, _Alloc>::npos;
 
 
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     typename basic_string<_CharT, _Traits, _Alloc>::size_type
     basic_string<_CharT, _Traits, _Alloc>::_S_empty_rep_storage[
     (sizeof(_Rep) + sizeof(_CharT) + sizeof(size_type) - 1)/sizeof(size_type)];
 
 
 
 
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     template<typename _InIter>
       _CharT*
       basic_string<_CharT, _Traits, _Alloc>::
       _S_construct(_InIter __beg, _InIter __end, const _Alloc& __a,
                    input_iterator_tag)
       {
         if (__beg == __end && __a == _Alloc())
           return _S_empty_rep()._M_refcopy();
 
         _CharT __buf[100];
         size_type __i = 0;
         while (__beg != __end && __i < sizeof(__buf) / sizeof(_CharT))
           {
             __buf[__i++] = *__beg;
             ++__beg;
           }
         _Rep* __r = _Rep::_S_create(__i, __a);
         traits_type::copy(__r->_M_refdata(), __buf, __i);
         __r->_M_length = __i;
         try
           {
 
 
 
             for (;;)
               {
                 _CharT* __p = __r->_M_refdata() + __r->_M_length;
                 _CharT* __last = __r->_M_refdata() + __r->_M_capacity;
                 for (;;)
                   {
                     if (__beg == __end)
                       {
                         __r->_M_length = __p - __r->_M_refdata();
                         *__p = _Rep::_S_terminal;
                         return __r->_M_refdata();
                       }
                     if (__p == __last)
                       break;
                     *__p++ = *__beg;
                     ++__beg;
                   }
 
                 size_type __len = __p - __r->_M_refdata();
                 _Rep* __another = _Rep::_S_create(__len + 1, __a);
                 traits_type::copy(__another->_M_refdata(),
                                   __r->_M_refdata(), __len);
                 __r->_M_destroy(__a);
                 __r = __another;
                 __r->_M_length = __len;
               }
           }
         catch(...)
           {
             __r->_M_destroy(__a);
             throw;
           }
         return 0;
       }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     template <class _InIter>
       _CharT*
       basic_string<_CharT, _Traits, _Alloc>::
       _S_construct(_InIter __beg, _InIter __end, const _Alloc& __a,
                    forward_iterator_tag)
       {
         size_type __dnew = static_cast<size_type>(distance(__beg, __end));
 
 
         if (__builtin_expect(__beg == _InIter(), 0))
           __throw_logic_error("attempt to create string with null pointer");
 
         if (__beg == __end && __a == _Alloc())
           return _S_empty_rep()._M_refcopy();
 
 
         _Rep* __r = _Rep::_S_create(__dnew, __a);
         try
           { _S_copy_chars(__r->_M_refdata(), __beg, __end); }
         catch(...)
           {
             __r->_M_destroy(__a);
             throw;
           }
         __r->_M_length = __dnew;
 
         __r->_M_refdata()[__dnew] = _Rep::_S_terminal;
         return __r->_M_refdata();
       }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     _CharT*
     basic_string<_CharT, _Traits, _Alloc>::
     _S_construct(size_type __n, _CharT __c, const _Alloc& __a)
     {
       if (__n == 0 && __a == _Alloc())
         return _S_empty_rep()._M_refcopy();
 
 
       _Rep* __r = _Rep::_S_create(__n, __a);
       try
         {
           if (__n)
             traits_type::assign(__r->_M_refdata(), __n, __c);
         }
       catch(...)
         {
           __r->_M_destroy(__a);
           throw;
         }
       __r->_M_length = __n;
       __r->_M_refdata()[__n] = _Rep::_S_terminal;
       return __r->_M_refdata();
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>::
     basic_string(const basic_string& __str)
     : _M_dataplus(__str._M_rep()->_M_grab(_Alloc(), __str.get_allocator()),
                  __str.get_allocator())
     { }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>::
     basic_string(const _Alloc& __a)
     : _M_dataplus(_S_construct(size_type(), _CharT(), __a), __a)
     { }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>::
     basic_string(const basic_string& __str, size_type __pos, size_type __n)
     : _M_dataplus(_S_construct(__str._M_check(__pos),
                                __str._M_fold(__pos, __n), _Alloc()), _Alloc())
     { }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>::
     basic_string(const basic_string& __str, size_type __pos,
                  size_type __n, const _Alloc& __a)
     : _M_dataplus(_S_construct(__str._M_check(__pos),
                                __str._M_fold(__pos, __n), __a), __a)
     { }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>::
     basic_string(const _CharT* __s, size_type __n, const _Alloc& __a)
     : _M_dataplus(_S_construct(__s, __s + __n, __a), __a)
     { }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>::
     basic_string(const _CharT* __s, const _Alloc& __a)
     : _M_dataplus(_S_construct(__s, __s ? __s + traits_type::length(__s) : 0,
                                __a), __a)
     { }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>::
     basic_string(size_type __n, _CharT __c, const _Alloc& __a)
     : _M_dataplus(_S_construct(__n, __c, __a), __a)
     { }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     template<typename _InputIter>
     basic_string<_CharT, _Traits, _Alloc>::
     basic_string(_InputIter __beg, _InputIter __end, const _Alloc& __a)
     : _M_dataplus(_S_construct(__beg, __end, __a), __a)
     { }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>&
     basic_string<_CharT, _Traits, _Alloc>::assign(const basic_string& __str)
     {
       if (_M_rep() != __str._M_rep())
         {
 
           allocator_type __a = this->get_allocator();
           _CharT* __tmp = __str._M_rep()->_M_grab(__a, __str.get_allocator());
           _M_rep()->_M_dispose(__a);
           _M_data(__tmp);
         }
       return *this;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     void
     basic_string<_CharT, _Traits, _Alloc>::_Rep::
     _M_destroy(const _Alloc& __a) throw ()
     {
       size_type __size = sizeof(_Rep) + (_M_capacity + 1) * sizeof(_CharT);
       _Raw_bytes_alloc(__a).deallocate(reinterpret_cast<char*>(this), __size);
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     void
     basic_string<_CharT, _Traits, _Alloc>::_M_leak_hard()
     {
       if (_M_rep()->_M_is_shared())
         _M_mutate(0, 0, 0);
       _M_rep()->_M_set_leaked();
     }
 
 
 
 
 
 
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     void
     basic_string<_CharT, _Traits, _Alloc>::
     _M_mutate(size_type __pos, size_type __len1, size_type __len2)
     {
       size_type __old_size = this->size();
       const size_type __new_size = __old_size + __len2 - __len1;
       const _CharT* __src = _M_data() + __pos + __len1;
       const size_type __how_much = __old_size - __pos - __len1;
 
       if (_M_rep()->_M_is_shared() || __new_size > capacity())
         {
 
           allocator_type __a = get_allocator();
 
 
           const size_type __pagesize = 4096;
           const size_type __malloc_header_size = 4 * sizeof (void*);
 
           const size_type __page_capacity = (__pagesize - __malloc_header_size
                                              - sizeof(_Rep) - sizeof(_CharT))
                                              / sizeof(_CharT);
           _Rep* __r;
           if (__new_size > capacity() && __new_size > __page_capacity)
 
             __r = _Rep::_S_create(__new_size > 2*capacity() ?
                                   __new_size : 2*capacity(), __a);
           else
             __r = _Rep::_S_create(__new_size, __a);
           try
             {
               if (__pos)
                 traits_type::copy(__r->_M_refdata(), _M_data(), __pos);
               if (__how_much)
                 traits_type::copy(__r->_M_refdata() + __pos + __len2,
                                   __src, __how_much);
             }
           catch(...)
             {
               __r->_M_dispose(get_allocator());
               throw;
             }
           _M_rep()->_M_dispose(__a);
           _M_data(__r->_M_refdata());
       }
       else if (__how_much && __len1 != __len2)
         {
 
           traits_type::move(_M_data() + __pos + __len2, __src, __how_much);
         }
       _M_rep()->_M_set_sharable();
       _M_rep()->_M_length = __new_size;
       _M_data()[__new_size] = _Rep::_S_terminal;
 
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     void
     basic_string<_CharT, _Traits, _Alloc>::reserve(size_type __res)
     {
       if (__res > this->capacity() || _M_rep()->_M_is_shared())
         {
           if (__res > this->max_size())
             __throw_length_error("basic_string::reserve");
 
           if (__res < this->size())
             __res = this->size();
           allocator_type __a = get_allocator();
           _CharT* __tmp = _M_rep()->_M_clone(__a, __res - this->size());
           _M_rep()->_M_dispose(__a);
           _M_data(__tmp);
         }
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     void basic_string<_CharT, _Traits, _Alloc>::swap(basic_string& __s)
     {
       if (_M_rep()->_M_is_leaked())
         _M_rep()->_M_set_sharable();
       if (__s._M_rep()->_M_is_leaked())
         __s._M_rep()->_M_set_sharable();
       if (this->get_allocator() == __s.get_allocator())
         {
           _CharT* __tmp = _M_data();
           _M_data(__s._M_data());
           __s._M_data(__tmp);
         }
 
       else
         {
           basic_string __tmp1(_M_ibegin(), _M_iend(), __s.get_allocator());
           basic_string __tmp2(__s._M_ibegin(), __s._M_iend(),
                               this->get_allocator());
           *this = __tmp2;
           __s = __tmp1;
         }
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     typename basic_string<_CharT, _Traits, _Alloc>::_Rep*
     basic_string<_CharT, _Traits, _Alloc>::_Rep::
     _S_create(size_t __capacity, const _Alloc& __alloc)
     {
       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
 
 
       if (__capacity > _S_max_size)
 
 
 
         __throw_length_error("basic_string::_S_create");
 
 
 
 
       size_t __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep);
 # 421 "/usr/include/c++/3.2/bits/basic_string.tcc" 3
       const size_t __pagesize = 4096;
       const size_t __subpagesize = 128;
       const size_t __malloc_header_size = 4 * sizeof (void*);
       if ((__size + __malloc_header_size) > __pagesize)
         {
           size_t __extra =
             (__pagesize - ((__size + __malloc_header_size) % __pagesize))
             % __pagesize;
           __capacity += __extra / sizeof(_CharT);
           __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep);
         }
       else if (__size > __subpagesize)
         {
           size_t __extra =
             (__subpagesize - ((__size + __malloc_header_size) % __subpagesize))
             % __subpagesize;
           __capacity += __extra / sizeof(_CharT);
           __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep);
         }
 
 
 
       void* __place = _Raw_bytes_alloc(__alloc).allocate(__size);
       _Rep *__p = new (__place) _Rep;
       __p->_M_capacity = __capacity;
       __p->_M_set_sharable();
       __p->_M_length = 0;
       return __p;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     _CharT*
     basic_string<_CharT, _Traits, _Alloc>::_Rep::
     _M_clone(const _Alloc& __alloc, size_type __res)
     {
 
       const size_type __requested_cap = _M_length + __res;
 
       const size_type __pagesize = 4096;
       const size_type __malloc_header_size = 4 * sizeof (void*);
 
       const size_type __page_capacity =
         (__pagesize - __malloc_header_size - sizeof(_Rep) - sizeof(_CharT))
         / sizeof(_CharT);
       _Rep* __r;
       if (__requested_cap > _M_capacity && __requested_cap > __page_capacity)
 
         __r = _Rep::_S_create(__requested_cap > 2*_M_capacity ?
                               __requested_cap : 2*_M_capacity, __alloc);
       else
         __r = _Rep::_S_create(__requested_cap, __alloc);
 
       if (_M_length)
         {
           try
             { traits_type::copy(__r->_M_refdata(), _M_refdata(), _M_length); }
           catch(...)
             {
               __r->_M_destroy(__alloc);
               throw;
             }
         }
       __r->_M_length = _M_length;
       return __r->_M_refdata();
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     void
     basic_string<_CharT, _Traits, _Alloc>::resize(size_type __n, _CharT __c)
     {
       if (__n > max_size())
         __throw_length_error("basic_string::resize");
       size_type __size = this->size();
       if (__size < __n)
         this->append(__n - __size, __c);
       else if (__n < __size)
         this->erase(__n);
 
     }
 
 
 
 
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     template<typename _InputIter>
       basic_string<_CharT, _Traits, _Alloc>&
       basic_string<_CharT, _Traits, _Alloc>::
       _M_replace(iterator __i1, iterator __i2, _InputIter __k1,
                  _InputIter __k2, input_iterator_tag)
       {
 
         basic_string __s(__k1, __k2);
         return _M_replace_safe(__i1, __i2, __s._M_ibegin(), __s._M_iend());
       }
 
 
 
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     template<typename _ForwardIter>
       basic_string<_CharT, _Traits, _Alloc>&
       basic_string<_CharT, _Traits, _Alloc>::
       _M_replace_safe(iterator __i1, iterator __i2, _ForwardIter __k1,
                       _ForwardIter __k2)
       {
         size_type __dnew = static_cast<size_type>(distance(__k1, __k2));
         size_type __dold = __i2 - __i1;
         size_type __dmax = this->max_size();
 
         if (__dmax <= __dnew)
           __throw_length_error("basic_string::_M_replace");
         size_type __off = __i1 - _M_ibegin();
         _M_mutate(__off, __dold, __dnew);
 
 
         if (__dnew)
           _S_copy_chars(_M_data() + __off, __k1, __k2);
 
         return *this;
       }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>&
     basic_string<_CharT, _Traits, _Alloc>::
     replace(size_type __pos1, size_type __n1, const basic_string& __str,
             size_type __pos2, size_type __n2)
     {
       const size_type __strsize = __str.size();
       if (__pos2 > __strsize)
         __throw_out_of_range("basic_string::replace");
       const bool __testn2 = __n2 < __strsize - __pos2;
       const size_type __foldn2 = __testn2 ? __n2 : __strsize - __pos2;
       return this->replace(__pos1, __n1,
                            __str._M_data() + __pos2, __foldn2);
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>&
     basic_string<_CharT, _Traits, _Alloc>::
     append(const basic_string& __str)
     {
 
 
 
       size_type __size = __str.size();
       size_type __len = __size + this->size();
       if (__len > this->capacity())
         this->reserve(__len);
       return _M_replace_safe(_M_iend(), _M_iend(), __str._M_ibegin(),
                              __str._M_iend());
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>&
     basic_string<_CharT, _Traits, _Alloc>::
     append(const basic_string& __str, size_type __pos, size_type __n)
     {
 
 
 
       size_type __len = min(__str.size() - __pos, __n) + this->size();
       if (__len > this->capacity())
         this->reserve(__len);
       return _M_replace_safe(_M_iend(), _M_iend(), __str._M_check(__pos),
                              __str._M_fold(__pos, __n));
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>&
     basic_string<_CharT, _Traits, _Alloc>::
     append(const _CharT* __s, size_type __n)
     {
       size_type __len = __n + this->size();
       if (__len > this->capacity())
         this->reserve(__len);
       return _M_replace_safe(_M_iend(), _M_iend(), __s, __s + __n);
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>&
     basic_string<_CharT, _Traits, _Alloc>::
     append(size_type __n, _CharT __c)
     {
       size_type __len = __n + this->size();
       if (__len > this->capacity())
         this->reserve(__len);
        return this->replace(_M_iend(), _M_iend(), __n, __c);
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>
     operator+(const _CharT* __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
     {
       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
       typedef typename __string_type::size_type __size_type;
       __size_type __len = _Traits::length(__lhs);
       __string_type __str;
       __str.reserve(__len + __rhs.size());
       __str.append(__lhs, __lhs + __len);
       __str.append(__rhs);
       return __str;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>
     operator+(_CharT __lhs, const basic_string<_CharT, _Traits, _Alloc>& __rhs)
     {
       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
       typedef typename __string_type::size_type __size_type;
       __string_type __str;
       __size_type __len = __rhs.size();
       __str.reserve(__len + 1);
       __str.append(__size_type(1), __lhs);
       __str.append(__rhs);
       return __str;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>&
     basic_string<_CharT, _Traits, _Alloc>::
     replace(iterator __i1, iterator __i2, size_type __n2, _CharT __c)
     {
       size_type __n1 = __i2 - __i1;
       size_type __off1 = __i1 - _M_ibegin();
       if (max_size() - (this->size() - __n1) <= __n2)
         __throw_length_error("basic_string::replace");
       _M_mutate (__off1, __n1, __n2);
 
       if (__n2)
         traits_type::assign(_M_data() + __off1, __n2, __c);
       return *this;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     typename basic_string<_CharT, _Traits, _Alloc>::size_type
     basic_string<_CharT, _Traits, _Alloc>::
     copy(_CharT* __s, size_type __n, size_type __pos) const
     {
       if (__pos > this->size())
         __throw_out_of_range("basic_string::copy");
 
       if (__n > this->size() - __pos)
         __n = this->size() - __pos;
 
       traits_type::copy(__s, _M_data() + __pos, __n);
 
       return __n;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     typename basic_string<_CharT, _Traits, _Alloc>::size_type
     basic_string<_CharT, _Traits, _Alloc>::
     find(const _CharT* __s, size_type __pos, size_type __n) const
     {
       size_type __size = this->size();
       size_t __xpos = __pos;
       const _CharT* __data = _M_data();
       for (; __xpos + __n <= __size; ++__xpos)
         if (traits_type::compare(__data + __xpos, __s, __n) == 0)
           return __xpos;
       return npos;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     typename basic_string<_CharT, _Traits, _Alloc>::size_type
     basic_string<_CharT, _Traits, _Alloc>::
     find(_CharT __c, size_type __pos) const
     {
       size_type __size = this->size();
       size_type __ret = npos;
       if (__pos < __size)
         {
           const _CharT* __data = _M_data();
           size_type __n = __size - __pos;
           const _CharT* __p = traits_type::find(__data + __pos, __n, __c);
           if (__p)
             __ret = __p - __data;
         }
       return __ret;
     }
 
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     typename basic_string<_CharT, _Traits, _Alloc>::size_type
     basic_string<_CharT, _Traits, _Alloc>::
     rfind(const _CharT* __s, size_type __pos, size_type __n) const
     {
       size_type __size = this->size();
       if (__n <= __size)
         {
           __pos = std::min(__size - __n, __pos);
           const _CharT* __data = _M_data();
           do
             {
               if (traits_type::compare(__data + __pos, __s, __n) == 0)
                 return __pos;
             }
           while (__pos-- > 0);
         }
       return npos;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     typename basic_string<_CharT, _Traits, _Alloc>::size_type
     basic_string<_CharT, _Traits, _Alloc>::
     rfind(_CharT __c, size_type __pos) const
     {
       size_type __size = this->size();
       if (__size)
         {
           size_t __xpos = __size - 1;
           if (__xpos > __pos)
             __xpos = __pos;
 
           for (++__xpos; __xpos-- > 0; )
             if (traits_type::eq(_M_data()[__xpos], __c))
               return __xpos;
         }
       return npos;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     typename basic_string<_CharT, _Traits, _Alloc>::size_type
     basic_string<_CharT, _Traits, _Alloc>::
     find_first_of(const _CharT* __s, size_type __pos, size_type __n) const
     {
       for (; __n && __pos < this->size(); ++__pos)
         {
           const _CharT* __p = traits_type::find(__s, __n, _M_data()[__pos]);
           if (__p)
             return __pos;
         }
       return npos;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     typename basic_string<_CharT, _Traits, _Alloc>::size_type
     basic_string<_CharT, _Traits, _Alloc>::
     find_last_of(const _CharT* __s, size_type __pos, size_type __n) const
     {
       size_type __size = this->size();
       if (__size && __n)
         {
           if (--__size > __pos)
             __size = __pos;
           do
             {
               if (traits_type::find(__s, __n, _M_data()[__size]))
                 return __size;
             }
           while (__size-- != 0);
         }
       return npos;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     typename basic_string<_CharT, _Traits, _Alloc>::size_type
     basic_string<_CharT, _Traits, _Alloc>::
     find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const
     {
       size_t __xpos = __pos;
       for (; __xpos < this->size(); ++__xpos)
         if (!traits_type::find(__s, __n, _M_data()[__xpos]))
           return __xpos;
       return npos;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     typename basic_string<_CharT, _Traits, _Alloc>::size_type
     basic_string<_CharT, _Traits, _Alloc>::
     find_first_not_of(_CharT __c, size_type __pos) const
     {
       size_t __xpos = __pos;
       for (; __xpos < this->size(); ++__xpos)
         if (!traits_type::eq(_M_data()[__xpos], __c))
           return __xpos;
       return npos;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     typename basic_string<_CharT, _Traits, _Alloc>::size_type
     basic_string<_CharT, _Traits, _Alloc>::
     find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const
     {
       size_type __size = this->size();
       if (__size)
         {
           if (--__size > __pos)
             __size = __pos;
           do
             {
               if (!traits_type::find(__s, __n, _M_data()[__size]))
                 return __size;
             }
           while (__size--);
         }
       return npos;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     typename basic_string<_CharT, _Traits, _Alloc>::size_type
     basic_string<_CharT, _Traits, _Alloc>::
     find_last_not_of(_CharT __c, size_type __pos) const
     {
       size_type __size = this->size();
       if (__size)
         {
           if (--__size > __pos)
             __size = __pos;
           do
             {
               if (!traits_type::eq(_M_data()[__size], __c))
                 return __size;
             }
           while (__size--);
         }
       return npos;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     int
     basic_string<_CharT, _Traits, _Alloc>::
     compare(size_type __pos, size_type __n, const basic_string& __str) const
     {
       size_type __size = this->size();
       size_type __osize = __str.size();
       if (__pos > __size)
         __throw_out_of_range("basic_string::compare");
 
       size_type __rsize= min(__size - __pos, __n);
       size_type __len = min(__rsize, __osize);
       int __r = traits_type::compare(_M_data() + __pos, __str.data(), __len);
       if (!__r)
         __r = __rsize - __osize;
       return __r;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     int
     basic_string<_CharT, _Traits, _Alloc>::
     compare(size_type __pos1, size_type __n1, const basic_string& __str,
             size_type __pos2, size_type __n2) const
     {
       size_type __size = this->size();
       size_type __osize = __str.size();
       if (__pos1 > __size || __pos2 > __osize)
         __throw_out_of_range("basic_string::compare");
 
       size_type __rsize = min(__size - __pos1, __n1);
       size_type __rosize = min(__osize - __pos2, __n2);
       size_type __len = min(__rsize, __rosize);
       int __r = traits_type::compare(_M_data() + __pos1,
                                      __str.data() + __pos2, __len);
       if (!__r)
         __r = __rsize - __rosize;
       return __r;
     }
 
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     int
     basic_string<_CharT, _Traits, _Alloc>::
     compare(const _CharT* __s) const
     {
       size_type __size = this->size();
       int __r = traits_type::compare(_M_data(), __s, __size);
       if (!__r)
         __r = __size - traits_type::length(__s);
       return __r;
     }
 
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     int
     basic_string <_CharT, _Traits, _Alloc>::
     compare(size_type __pos, size_type __n1, const _CharT* __s) const
     {
       size_type __size = this->size();
       if (__pos > __size)
         __throw_out_of_range("basic_string::compare");
 
       size_type __osize = traits_type::length(__s);
       size_type __rsize = min(__size - __pos, __n1);
       size_type __len = min(__rsize, __osize);
       int __r = traits_type::compare(_M_data() + __pos, __s, __len);
       if (!__r)
         __r = __rsize - __osize;
       return __r;
     }
 
   template<typename _CharT, typename _Traits, typename _Alloc>
     int
     basic_string <_CharT, _Traits, _Alloc>::
     compare(size_type __pos, size_type __n1, const _CharT* __s,
             size_type __n2) const
     {
       size_type __size = this->size();
       if (__pos > __size)
         __throw_out_of_range("basic_string::compare");
 
       size_type __osize = min(traits_type::length(__s), __n2);
       size_type __rsize = min(__size - __pos, __n1);
       size_type __len = min(__rsize, __osize);
       int __r = traits_type::compare(_M_data() + __pos, __s, __len);
       if (!__r)
         __r = __rsize - __osize;
       return __r;
     }
 
   template <class _CharT, class _Traits, class _Alloc>
     void
     _S_string_copy(const basic_string<_CharT, _Traits, _Alloc>& __str,
                    _CharT* __buf, typename _Alloc::size_type __bufsiz)
     {
       typedef typename _Alloc::size_type size_type;
       size_type __strsize = __str.size();
       size_type __bytes = min(__strsize, __bufsiz - 1);
       _Traits::copy(__buf, __str.data(), __bytes);
       __buf[__bytes] = _CharT();
     }
 
 
 
 
   extern template class basic_string<char>;
   extern template
     basic_istream<char>&
     operator>>(basic_istream<char>&, string&);
   extern template
     basic_ostream<char>&
     operator<<(basic_ostream<char>&, const string&);
   extern template
     basic_istream<char>&
     getline(basic_istream<char>&, string&, char);
   extern template
     basic_istream<char>&
     getline(basic_istream<char>&, string&);
 
   extern template class basic_string<wchar_t>;
   extern template
     basic_istream<wchar_t>&
     operator>>(basic_istream<wchar_t>&, wstring&);
   extern template
     basic_ostream<wchar_t>&
     operator<<(basic_ostream<wchar_t>&, const wstring&);
   extern template
     basic_istream<wchar_t>&
     getline(basic_istream<wchar_t>&, wstring&, wchar_t);
   extern template
     basic_istream<wchar_t>&
     getline(basic_istream<wchar_t>&, wstring&);
 }
 # 58 "/usr/include/c++/3.2/string" 2 3
 # 2 "gcc-3.2-ICE.cc" 2
 
 struct Bar
 {
     std::string str;
 };
 
 int main()
 {
   Bar bar = { "hello" };
 }
 
 --=-=-=
 
 
 Regards, Andy
 -- 
 Andreas Rottmann         | Dru@ICQ        | 118634484@ICQ | a.rottmann@gmx.at
 http://www.8ung.at/rotty | GnuPG Key: http://www.8ung.at/rotty/gpg.asc
 Fingerprint              | DFB4 4EB4 78A4 5EEE 6219  F228 F92F CFC5 01FD 5B62
 
 --=-=-=--


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: c++/7929: ICE on struct initialization
@ 2002-09-30  2:46 Reichelt
  0 siblings, 0 replies; 6+ messages in thread
From: Reichelt @ 2002-09-30  2:46 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/7929; it has been noted by GNATS.

From: Reichelt <reichelt@igpm.rwth-aachen.de>
To: a.rottmann@gmx.at, gcc-gnats@gcc.gnu.org, gcc-bugs@gcc.gnu.org,
        nobody@gcc.gnu.org
Cc:  
Subject: Re: c++/7929: ICE on struct initialization
Date: Mon, 30 Sep 2002 12:29:09 +0200

 Hi,
 
 it seems that your gcc installation is broken:
 Your preprocessed file shows lots of lines like
 
 # 6 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/string" 2 3
 
 which refer to 2.95.4 instead of 3.2. In fact there is not a single line
 referring to 3.2.
 
 I cannot reproduce your bug on an i686 with a working installation of
 gcc. The preprocessed file causes some error messages, but no ICE. 
 
 Greetings,
 Volker Reichelt
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7929
 
 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* c++/7929: ICE on struct initialization
@ 2002-09-16  6:46 a.rottmann
  0 siblings, 0 replies; 6+ messages in thread
From: a.rottmann @ 2002-09-16  6:46 UTC (permalink / raw)
  To: gcc-gnats, debian-gcc


>Number:         7929
>Category:       c++
>Synopsis:       ICE on struct initialization
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Mon Sep 16 06:46:02 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Andreas Rottmann
>Release:        3.2.1 20020830 (Debian prerelease) (Debian testing/unstable)
>Organization:
>Environment:
System: Linux alice 2.4.18 #1 Wed Sep 11 17:49:03 CEST 2002 i686 unknown unknown GNU/Linux
Architecture: i686
host: i386-pc-linux-gnu
build: i386-pc-linux-gnu
target: i386-pc-linux-gnu
configured with: /mnt/data/gcc-3.1/gcc-3.2-3.2.1ds0/src/configure -v --enable-languages=c,c++,java,f77,proto,objc,ada --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.2 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --enable-__cxa_atexit --enable-java-gc=boehm --enable-objc-gc i386-linux
>Description:
g++ 3.2 fails with an ICE:

./g++-3.2 -o test test.cc
test.cc: In function `int main()':
test.cc:10: Internal compiler error in cp_expr_size, at cp/cp-lang.c:130

>How-To-Repeat:

This is the code g++ fails upon:
-------<snip>------
#include <string>

struct Bar
{
    std::string str;
};

int main()
{
  Bar bar = { "hello" };
}
--------<snap>----

Preprocessor output (g++-3.2 -E test.cc):

-------<snip>----
 
 

 
 
 
 

 
 
 

 
 
 
 
 

 
 





#pragma interface


# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/cstddef" 1 3
 
 



# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 1 3






 







 

 




 


 





 


# 61 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 





 


















 





 

 





















typedef int ptrdiff_t;









 




 

 


































typedef unsigned int size_t;






















 




 





























 



















































typedef unsigned int  wint_t;




 

 

# 317 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3




 













 







# 6 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/cstddef" 2 3


# 35 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/std/bastring.h" 2 3

# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/std/straits.h" 1 3
 
 

 
 
 
 
 

 
 
 
 

 
 
 

 
 
 
 
 

 
 





 
#pragma interface "std/straits.h"




extern "C++" {
template <class charT>
struct string_char_traits {
  typedef charT char_type;  

   

  static void assign (char_type& c1, const char_type& c2)
    { c1 = c2; }
  static bool eq (const char_type& c1, const char_type& c2)
    { return (c1 == c2); }
  static bool ne (const char_type& c1, const char_type& c2)
    { return !(c1 == c2); }
  static bool lt (const char_type& c1, const char_type& c2)
    { return (c1 < c2); }
  static char_type eos () { return char_type(); }  
  static bool is_del(char_type a) { return 0; }
   
  
   

  static int compare (const char_type* s1, const char_type* s2, size_t n)
    {
      size_t i;
      for (i = 0; i < n; ++i)
	if (ne (s1[i], s2[i]))
	  return lt (s1[i], s2[i]) ? -1 : 1;

      return 0;
    }
    
  static size_t length (const char_type* s)
    {
      size_t l = 0;
      while (ne (*s++, eos ()))
	++l;
      return l;
    }

  static char_type* copy (char_type* s1, const char_type* s2, size_t n)
    {
      for (; n--; )
	assign (s1[n], s2[n]);
      return s1;
    }

  static char_type* move (char_type* s1, const char_type* s2, size_t n)
    {
      char_type a[n];
      size_t i;
      for (i = 0; i < n; ++i)
	assign (a[i], s2[i]);
      for (i = 0; i < n; ++i)
	assign (s1[i], a[i]);
      return s1;
    }

  static char_type* set (char_type* s1, const char_type& c, size_t n)
    {
      for (; n--; )
	assign (s1[n], c);
      return s1;
    }
};

class istream;
class ostream;
# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/cctype" 1 3
 
 



# 1 "/usr/include/ctype.h" 1 3
 

















 






# 1 "/usr/include/features.h" 1 3
 




















 






























































 




















 





 



 







 
# 142 "/usr/include/features.h" 3


 









 








 



























# 208 "/usr/include/features.h" 3


































 



 


 








 




 
















 


# 1 "/usr/include/sys/cdefs.h" 1 3
 




















 




 






 





 








 



# 65 "/usr/include/sys/cdefs.h" 3


 





 




 









 







 

















 















 







 






 








 








 








 











 










 







 




 


















# 283 "/usr/include/features.h" 2 3



 








 





 

 








# 1 "/usr/include/gnu/stubs.h" 1 3
 



















# 312 "/usr/include/features.h" 2 3




# 26 "/usr/include/ctype.h" 2 3

# 1 "/usr/include/bits/types.h" 1 3
 

















 









# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 1 3






 


# 19 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3



 


 





 


# 61 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 





 


















 





 

 


# 126 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 




 

 


# 188 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3





 




 


# 269 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3
















 

 

# 317 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3




 













 







# 29 "/usr/include/bits/types.h" 2 3


 
typedef unsigned char __u_char;
typedef unsigned short __u_short;
typedef unsigned int __u_int;
typedef unsigned long __u_long;

__extension__ typedef unsigned long long int __u_quad_t;
__extension__ typedef long long int __quad_t;
# 48 "/usr/include/bits/types.h" 3

typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;

__extension__ typedef signed long long int __int64_t;
__extension__ typedef unsigned long long int __uint64_t;

typedef __quad_t *__qaddr_t;

typedef __u_quad_t __dev_t;		 
typedef __u_int __uid_t;		 
typedef __u_int __gid_t;		 
typedef __u_long __ino_t;		 
typedef __u_int __mode_t;		 
typedef __u_int __nlink_t; 		 
typedef long int __off_t;		 
typedef __quad_t __loff_t;		 
typedef int __pid_t;			 
typedef int __ssize_t;			 
typedef __u_long __rlim_t;		 
typedef __u_quad_t __rlim64_t;		 
typedef __u_int __id_t;			 

typedef struct
  {
    int __val[2];
  } __fsid_t;				 

 
typedef int __daddr_t;			 
typedef char *__caddr_t;
typedef long int __time_t;
typedef unsigned int __useconds_t;
typedef long int __suseconds_t;
typedef long int __swblk_t;		 
\f
typedef long int __clock_t;

 
typedef int __clockid_t;

 
typedef int __timer_t;


 



typedef int __key_t;

 
typedef unsigned short int __ipc_pid_t;


 
typedef long int __blksize_t;

 

 
typedef long int __blkcnt_t;
typedef __quad_t __blkcnt64_t;

 
typedef __u_long __fsblkcnt_t;
typedef __u_quad_t __fsblkcnt64_t;

 
typedef __u_long __fsfilcnt_t;
typedef __u_quad_t __fsfilcnt64_t;

 
typedef __u_quad_t __ino64_t;

 
typedef __loff_t __off64_t;

 
typedef long int __t_scalar_t;
typedef unsigned long int __t_uscalar_t;

 
typedef int __intptr_t;

 
typedef unsigned int __socklen_t;


 

# 1 "/usr/include/bits/pthreadtypes.h" 1 3
 
 
 
 
 
 
 
 
 
 
 
 
 









# 1 "/usr/include/bits/sched.h" 1 3
 



















# 62 "/usr/include/bits/sched.h" 3





 
struct __sched_param
  {
    int __sched_priority;
  };


# 23 "/usr/include/bits/pthreadtypes.h" 2 3


typedef int __atomic_lock_t;

 
struct _pthread_fastlock
{
  long int __status;    
  __atomic_lock_t __spinlock;   

};


 
typedef struct _pthread_descr_struct *_pthread_descr;




 
typedef struct __pthread_attr_s
{
  int __detachstate;
  int __schedpolicy;
  struct __sched_param __schedparam;
  int __inheritsched;
  int __scope;
  size_t __guardsize;
  int __stackaddr_set;
  void *__stackaddr;
  size_t __stacksize;
} pthread_attr_t;


 
typedef struct
{
  struct _pthread_fastlock __c_lock;  
  _pthread_descr __c_waiting;         
} pthread_cond_t;


 
typedef struct
{
  int __dummy;
} pthread_condattr_t;

 
typedef unsigned int pthread_key_t;


 
 

typedef struct
{
  int __m_reserved;                
  int __m_count;                   
  _pthread_descr __m_owner;        
  int __m_kind;                    
  struct _pthread_fastlock __m_lock;  
} pthread_mutex_t;


 
typedef struct
{
  int __mutexkind;
} pthread_mutexattr_t;


 
typedef int pthread_once_t;


# 119 "/usr/include/bits/pthreadtypes.h" 3


# 138 "/usr/include/bits/pthreadtypes.h" 3



 
typedef unsigned long int pthread_t;


# 143 "/usr/include/bits/types.h" 2 3




# 27 "/usr/include/ctype.h" 2 3


extern "C" { 


 







# 1 "/usr/include/endian.h" 1 3
 






















 











 
# 1 "/usr/include/bits/endian.h" 1 3
 






# 37 "/usr/include/endian.h" 2 3


 



















# 40 "/usr/include/ctype.h" 2 3







enum
{
  _ISupper = (( 0 ) < 8 ? ((1 << ( 0 )) << 8) : ((1 << ( 0 )) >> 8)) ,	 
  _ISlower = (( 1 ) < 8 ? ((1 << ( 1 )) << 8) : ((1 << ( 1 )) >> 8)) ,	 
  _ISalpha = (( 2 ) < 8 ? ((1 << ( 2 )) << 8) : ((1 << ( 2 )) >> 8)) ,	 
  _ISdigit = (( 3 ) < 8 ? ((1 << ( 3 )) << 8) : ((1 << ( 3 )) >> 8)) ,	 
  _ISxdigit = (( 4 ) < 8 ? ((1 << ( 4 )) << 8) : ((1 << ( 4 )) >> 8)) ,	 
  _ISspace = (( 5 ) < 8 ? ((1 << ( 5 )) << 8) : ((1 << ( 5 )) >> 8)) ,	 
  _ISprint = (( 6 ) < 8 ? ((1 << ( 6 )) << 8) : ((1 << ( 6 )) >> 8)) ,	 
  _ISgraph = (( 7 ) < 8 ? ((1 << ( 7 )) << 8) : ((1 << ( 7 )) >> 8)) ,	 
  _ISblank = (( 8 ) < 8 ? ((1 << ( 8 )) << 8) : ((1 << ( 8 )) >> 8)) ,	 
  _IScntrl = (( 9 ) < 8 ? ((1 << ( 9 )) << 8) : ((1 << ( 9 )) >> 8)) ,	 
  _ISpunct = (( 10 ) < 8 ? ((1 << ( 10 )) << 8) : ((1 << ( 10 )) >> 8)) ,	 
  _ISalnum = (( 11 ) < 8 ? ((1 << ( 11 )) << 8) : ((1 << ( 11 )) >> 8)) 	 
};


 










extern __const unsigned short int *__ctype_b;	 
extern __const __int32_t *__ctype_tolower;  
extern __const __int32_t *__ctype_toupper;  









 



extern int  isalnum  (int) throw ()  ;
extern int  isalpha  (int) throw ()  ;
extern int  iscntrl  (int) throw ()  ;
extern int  isdigit  (int) throw ()  ;
extern int  islower  (int) throw ()  ;
extern int  isgraph  (int) throw ()  ;
extern int  isprint  (int) throw ()  ;
extern int  ispunct  (int) throw ()  ;
extern int  isspace  (int) throw ()  ;
extern int  isupper  (int) throw ()  ;
extern int  isxdigit  (int) throw ()  ;






 
extern int tolower (int __c) throw () ;

 
extern int toupper (int __c) throw () ;




 

extern int isascii (int __c) throw () ;

 

extern int toascii (int __c) throw () ;

 

extern int  _toupper  (int) throw ()  ;
extern int  _tolower  (int) throw ()  ;


 

# 148 "/usr/include/ctype.h" 3


















# 178 "/usr/include/ctype.h" 3


















# 274 "/usr/include/ctype.h" 3


} 


# 6 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/cctype" 2 3


# 105 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/std/straits.h" 2 3

# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/cstring" 1 3
 
 




# 1 "/usr/include/string.h" 1 3
 

















 








extern "C" { 

 


# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 1 3






 


# 19 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3



 


 





 


# 61 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 





 


















 





 

 


# 126 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 




 

 


# 188 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3





 




 


# 269 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3
















 

 

# 317 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3




 













 







# 33 "/usr/include/string.h" 2 3



 
extern void *memcpy (void *__restrict __dest,
		     __const void *__restrict __src, size_t __n) throw () ;
 

extern void *memmove (void *__dest, __const void *__src, size_t __n)
     throw () ;

 



extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
		      int __c, size_t __n)
     throw () ;



 
extern void *memset (void *__s, int __c, size_t __n) throw () ;

 
extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
     throw ()   ;

 
extern void *memchr (__const void *__s, int __c, size_t __n)
      throw ()   ;

# 73 "/usr/include/string.h" 3



 
extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
     throw () ;
 
extern char *strncpy (char *__restrict __dest,
		      __const char *__restrict __src, size_t __n) throw () ;

 
extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
     throw () ;
 
extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
		      size_t __n) throw () ;

 
extern int strcmp (__const char *__s1, __const char *__s2)
     throw ()   ;
 
extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
     throw ()   ;

 
extern int strcoll (__const char *__s1, __const char *__s2)
     throw ()   ;
 
extern size_t strxfrm (char *__restrict __dest,
		       __const char *__restrict __src, size_t __n) throw () ;

# 116 "/usr/include/string.h" 3



 
extern char *strdup (__const char *__s) throw ()   ;


 







# 152 "/usr/include/string.h" 3


 
extern char *strchr (__const char *__s, int __c) throw ()   ;
 
extern char *strrchr (__const char *__s, int __c) throw ()   ;







 

extern size_t strcspn (__const char *__s, __const char *__reject)
     throw ()   ;
 

extern size_t strspn (__const char *__s, __const char *__accept)
     throw ()   ;
 
extern char *strpbrk (__const char *__s, __const char *__accept)
     throw ()   ;
 
extern char *strstr (__const char *__haystack, __const char *__needle)
     throw ()   ;







 
extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
     throw () ;

 

extern char *__strtok_r (char *__restrict __s,
			 __const char *__restrict __delim,
			 char **__restrict __save_ptr) throw () ;

extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
		       char **__restrict __save_ptr) throw () ;


# 214 "/usr/include/string.h" 3



 
extern size_t strlen (__const char *__s) throw ()   ;









 
extern char *strerror (int __errnum) throw () ;

 

extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) throw () ;


 

extern void __bzero (void *__s, size_t __n) throw () ;


 
extern void bcopy (__const void *__src, void *__dest, size_t __n) throw () ;

 
extern void bzero (void *__s, size_t __n) throw () ;

 
extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
     throw ()   ;

 
extern char *index (__const char *__s, int __c) throw ()   ;

 
extern char *rindex (__const char *__s, int __c) throw ()   ;

 

extern int ffs (int __i) throw ()  __attribute__ ((__const__));

 









 
extern int strcasecmp (__const char *__s1, __const char *__s2)
     throw ()   ;

 
extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
     throw ()   ;


# 289 "/usr/include/string.h" 3



 

extern char *strsep (char **__restrict __stringp,
		     __const char *__restrict __delim) throw () ;


# 332 "/usr/include/string.h" 3




# 361 "/usr/include/string.h" 3



} 


# 7 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/cstring" 2 3


# 94 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/cstring" 3



# 106 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/std/straits.h" 2 3


struct string_char_traits <char> {
  typedef char char_type;

  static void assign (char_type& c1, const char_type& c2)
    { c1 = c2; }
  static bool eq (const char_type & c1, const char_type& c2)
    { return (c1 == c2); }
  static bool ne (const char_type& c1, const char_type& c2)
    { return (c1 != c2); }
  static bool lt (const char_type& c1, const char_type& c2)
    { return (c1 < c2); }
  static char_type eos () { return 0; }
  static bool is_del(char_type a) { return (__ctype_b[(int) ( ( a ) )] & (unsigned short int)   _ISspace )  ; }

  static int compare (const char_type* s1, const char_type* s2, size_t n)
    { return memcmp (s1, s2, n); }
  static size_t length (const char_type* s)
    { return strlen (s); }
  static char_type* copy (char_type* s1, const char_type* s2, size_t n)
    { return (char_type*) memcpy (s1, s2, n); }
  static char_type* move (char_type* s1, const char_type* s2, size_t n)
    { return (char_type*) memmove (s1, s2, n); }
  static char_type* set (char_type* s1, const char_type& c, size_t n)
    { return (char_type*) memset (s1, c, n); }
};

# 159 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/std/straits.h" 3

}  

# 36 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/std/bastring.h" 2 3


 
# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/alloc.h" 1 3
 
















# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_config.h" 1 3
 




























 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


 
 
 
 
 
 
 
 
 
 
 


 

 
 
 
 
 
 
 








# 148 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_config.h" 3



# 1 "/usr/include/_G_config.h" 1 3
 





 






# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 1 3






 


# 19 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3



 


 





 


# 61 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 





 


















 





 

 


# 126 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 




 

 


# 188 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3





 




 


# 269 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3
















 

 

# 317 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3




 













 







# 14 "/usr/include/_G_config.h" 2 3










# 1 "/usr/include/wchar.h" 1 3
 

















 











# 46 "/usr/include/wchar.h" 3


# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 1 3






 


# 19 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3



 


 





 


# 61 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 





 


















 





 

 


# 126 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 




 

 


# 188 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3





 




 


# 269 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3
















 

 

# 317 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3




 













 







# 48 "/usr/include/wchar.h" 2 3


# 1 "/usr/include/bits/wchar.h" 1 3
 

























# 50 "/usr/include/wchar.h" 2 3


 













 
typedef struct
{
  int __count;
  union
  {
    wint_t __wch;
    char __wchb[4];
  } __value;		 
} __mbstate_t;




 

# 682 "/usr/include/wchar.h" 3



# 24 "/usr/include/_G_config.h" 2 3


typedef struct
{
  __off_t __pos;
  __mbstate_t __state;
} _G_fpos_t;
typedef struct
{
  __off64_t __pos;
  __mbstate_t __state;
} _G_fpos64_t;








# 1 "/usr/include/gconv.h" 1 3
 

















 








# 1 "/usr/include/wchar.h" 1 3
 

















 











# 46 "/usr/include/wchar.h" 3


# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 1 3






 


# 19 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3



 


 





 


# 61 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 





 


















 





 

 


# 126 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 




 

 


# 188 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3





 




 


# 269 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3
















 

 

# 317 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3




 













 







# 48 "/usr/include/wchar.h" 2 3




 











# 76 "/usr/include/wchar.h" 3




 

# 682 "/usr/include/wchar.h" 3



# 28 "/usr/include/gconv.h" 2 3



# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 1 3






 


# 19 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3



 


 





 


# 61 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 





 


















 





 

 


# 126 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 




 

 


# 188 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3





 




 


# 269 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3
















 

 

# 317 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3




 













 







# 31 "/usr/include/gconv.h" 2 3


 


 
enum
{
  __GCONV_OK = 0,
  __GCONV_NOCONV,
  __GCONV_NODB,
  __GCONV_NOMEM,

  __GCONV_EMPTY_INPUT,
  __GCONV_FULL_OUTPUT,
  __GCONV_ILLEGAL_INPUT,
  __GCONV_INCOMPLETE_INPUT,

  __GCONV_ILLEGAL_DESCRIPTOR,
  __GCONV_INTERNAL_ERROR
};


 
enum
{
  __GCONV_IS_LAST = 0x0001,
  __GCONV_IGNORE_ERRORS = 0x0002
};


 
struct __gconv_step;
struct __gconv_step_data;
struct __gconv_loaded_object;
struct __gconv_trans_data;


 
typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *,
			    __const unsigned char **, __const unsigned char *,
			    unsigned char **, size_t *, int, int);

 
typedef int (*__gconv_init_fct) (struct __gconv_step *);
typedef void (*__gconv_end_fct) (struct __gconv_step *);


 
typedef int (*__gconv_trans_fct) (struct __gconv_step *,
				  struct __gconv_step_data *, void *,
				  __const unsigned char *,
				  __const unsigned char **,
				  __const unsigned char *, unsigned char **,
				  size_t *);

 
typedef int (*__gconv_trans_context_fct) (void *, __const unsigned char *,
					  __const unsigned char *,
					  unsigned char *, unsigned char *);

 
typedef int (*__gconv_trans_query_fct) (__const char *, __const char ***,
					size_t *);

 
typedef int (*__gconv_trans_init_fct) (void **, const char *);
typedef void (*__gconv_trans_end_fct) (void *);

struct __gconv_trans_data
{
   
  __gconv_trans_fct __trans_fct;
  __gconv_trans_context_fct __trans_context_fct;
  __gconv_trans_end_fct __trans_end_fct;
  void *__data;
  struct __gconv_trans_data *__next;
};


 
struct __gconv_step
{
  struct __gconv_loaded_object *__shlib_handle;
  __const char *__modname;

  int __counter;

  char *__from_name;
  char *__to_name;

  __gconv_fct __fct;
  __gconv_init_fct __init_fct;
  __gconv_end_fct __end_fct;

   

  int __min_needed_from;
  int __max_needed_from;
  int __min_needed_to;
  int __max_needed_to;

   
  int __stateful;

  void *__data;		 
};

 

struct __gconv_step_data
{
  unsigned char *__outbuf;     
  unsigned char *__outbufend;  


   
  int __flags;

   

  int __invocation_counter;

   

  int __internal_use;

  __mbstate_t *__statep;
  __mbstate_t __state;	 


   
  struct __gconv_trans_data *__trans;
};


 
typedef struct __gconv_info
{
  size_t __nsteps;
  struct __gconv_step *__steps;
  __extension__ struct __gconv_step_data __data [0] ;
} *__gconv_t;


# 44 "/usr/include/_G_config.h" 2 3

typedef union
{
  struct __gconv_info __cd;
  struct
  {
    struct __gconv_info __cd;
    struct __gconv_step_data __data;
  } __combined;
} _G_iconv_t;

typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));




 


















 




 














# 151 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_config.h" 2 3


















      








































# 234 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_config.h" 3


# 248 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_config.h" 3



































 
 
 
 


















 
 
# 316 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_config.h" 3






































 
 
 
# 18 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/alloc.h" 2 3



# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_alloc.h" 1 3
 












 



















 
 
 
 
 
 


# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/new" 1 3
 
 




#pragma interface "new"
# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 1 3
# 342 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3

# 8 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/new" 2 3

# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/exception" 1 3
 
 




#pragma interface "exception"

extern "C++" {

namespace std {

class exception {
public:
  exception () { }
  virtual ~exception () { }
  virtual const char* what () const;
};

class bad_exception : public exception {
public:
  bad_exception () { }
  virtual ~bad_exception () { }
};

typedef void (*terminate_handler) ();
typedef void (*unexpected_handler) ();

terminate_handler set_terminate (terminate_handler);
void terminate () __attribute__ ((__noreturn__));
unexpected_handler set_unexpected (unexpected_handler);
void unexpected () __attribute__ ((__noreturn__));
bool uncaught_exception ();

}  

}  


# 9 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/new" 2 3


extern "C++" {

namespace std {

  class bad_alloc : public exception {
  public:
    virtual const char* what() const throw() { return "bad_alloc"; }
  };

  struct nothrow_t {};
  extern const nothrow_t nothrow;
  typedef void (*new_handler)();
  new_handler set_new_handler (new_handler);

}  

 
void *operator new (size_t) throw (std::bad_alloc);
void *operator new[] (size_t) throw (std::bad_alloc);
void operator delete (void *) throw();
void operator delete[] (void *) throw();
void *operator new (size_t, const std::nothrow_t&) throw();
void *operator new[] (size_t, const std::nothrow_t&) throw();
void operator delete (void *, const std::nothrow_t&) throw();
void operator delete[] (void *, const std::nothrow_t&) throw();

 
inline void *operator new(size_t, void *place) throw() { return place; }
inline void *operator new[](size_t, void *place) throw() { return place; }
}  


# 42 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_alloc.h" 2 3











# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 1 3
# 342 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3

# 53 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_alloc.h" 2 3

# 1 "/usr/include/stdlib.h" 1 3
 

















 







 





# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 1 3






 


# 19 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3



 


 





 


# 61 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 





 


















 





 

 


# 126 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 




 

 


# 188 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3





 




 


# 269 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3
















 

 

# 317 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3




 













 







# 33 "/usr/include/stdlib.h" 2 3


extern "C" { 




# 91 "/usr/include/stdlib.h" 3


 
typedef struct
  {
    int quot;			 
    int rem;			 
  } div_t;

 

typedef struct
  {
    long int quot;		 
    long int rem;		 
  } ldiv_t;



# 118 "/usr/include/stdlib.h" 3



 



 





 

extern size_t __ctype_get_mb_cur_max (void) throw () ;


 
extern double atof (__const char *__nptr) throw ()   ;
 
extern int atoi (__const char *__nptr) throw ()   ;
 
extern long int atol (__const char *__nptr) throw ()   ;


 
__extension__ extern long long int atoll (__const char *__nptr)
     throw ()   ;


 
extern double strtod (__const char *__restrict __nptr,
		      char **__restrict __endptr) throw () ;










 
extern long int strtol (__const char *__restrict __nptr,
			char **__restrict __endptr, int __base) throw () ;
 
extern unsigned long int strtoul (__const char *__restrict __nptr,
				  char **__restrict __endptr, int __base)
     throw () ;


 
__extension__
extern long long int strtoq (__const char *__restrict __nptr,
			     char **__restrict __endptr, int __base) throw () ;
 
__extension__
extern unsigned long long int strtouq (__const char *__restrict __nptr,
				       char **__restrict __endptr, int __base)
     throw () ;



 

 
__extension__
extern long long int strtoll (__const char *__restrict __nptr,
			      char **__restrict __endptr, int __base) throw () ;
 
__extension__
extern unsigned long long int strtoull (__const char *__restrict __nptr,
					char **__restrict __endptr, int __base)
     throw () ;



# 244 "/usr/include/stdlib.h" 3



 


extern double __strtod_internal (__const char *__restrict __nptr,
				 char **__restrict __endptr, int __group)
     throw () ;
extern float __strtof_internal (__const char *__restrict __nptr,
				char **__restrict __endptr, int __group)
     throw () ;
extern long double __strtold_internal (__const char *__restrict __nptr,
				       char **__restrict __endptr,
				       int __group) throw () ;

extern long int __strtol_internal (__const char *__restrict __nptr,
				   char **__restrict __endptr,
				   int __base, int __group) throw () ;



extern unsigned long int __strtoul_internal (__const char *__restrict __nptr,
					     char **__restrict __endptr,
					     int __base, int __group) throw () ;




__extension__
extern long long int __strtoll_internal (__const char *__restrict __nptr,
					 char **__restrict __endptr,
					 int __base, int __group) throw () ;



__extension__
extern unsigned long long int __strtoull_internal (__const char *
						   __restrict __nptr,
						   char **__restrict __endptr,
						   int __base, int __group)
     throw () ;




# 377 "/usr/include/stdlib.h" 3




 


extern char *l64a (long int __n) throw () ;

 
extern long int a64l (__const char *__s) throw ()   ;


# 1 "/usr/include/sys/types.h" 1 3
 

















 








extern "C" { 





typedef __u_char u_char;
typedef __u_short u_short;
typedef __u_int u_int;
typedef __u_long u_long;
typedef __quad_t quad_t;
typedef __u_quad_t u_quad_t;
typedef __fsid_t fsid_t;




typedef __loff_t loff_t;



typedef __ino_t ino_t;











typedef __dev_t dev_t;




typedef __gid_t gid_t;




typedef __mode_t mode_t;




typedef __nlink_t nlink_t;




typedef __uid_t uid_t;





typedef __off_t off_t;











typedef __pid_t pid_t;




typedef __id_t id_t;




typedef __ssize_t ssize_t;





typedef __daddr_t daddr_t;
typedef __caddr_t caddr_t;





typedef __key_t key_t;









# 1 "/usr/include/time.h" 1 3
 

















 














# 51 "/usr/include/time.h" 3


# 61 "/usr/include/time.h" 3








 
typedef __time_t time_t;










 
typedef __clockid_t clockid_t;










 
typedef __timer_t timer_t;





# 112 "/usr/include/time.h" 3




# 364 "/usr/include/time.h" 3



# 132 "/usr/include/sys/types.h" 2 3


# 143 "/usr/include/sys/types.h" 3



# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 1 3






 


# 19 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3



 


 





 


# 61 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 





 


















 





 

 


# 126 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 




 

 


# 188 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3





 




 


# 269 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3
















 

 

# 317 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3




 













 







# 146 "/usr/include/sys/types.h" 2 3



 
typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;


 

# 180 "/usr/include/sys/types.h" 3


 







typedef int int8_t __attribute__ ((__mode__ (  __QI__ ))) ;
typedef int int16_t __attribute__ ((__mode__ (  __HI__ ))) ;
typedef int int32_t __attribute__ ((__mode__ (  __SI__ ))) ;
typedef int int64_t __attribute__ ((__mode__ (  __DI__ ))) ;


typedef unsigned int u_int8_t __attribute__ ((__mode__ (  __QI__ ))) ;
typedef unsigned int u_int16_t __attribute__ ((__mode__ (  __HI__ ))) ;
typedef unsigned int u_int32_t __attribute__ ((__mode__ (  __SI__ ))) ;
typedef unsigned int u_int64_t __attribute__ ((__mode__ (  __DI__ ))) ;

typedef int register_t __attribute__ ((__mode__ (__word__)));


 






 


 
# 1 "/usr/include/sys/select.h" 1 3
 


















 






 


 
# 1 "/usr/include/bits/select.h" 1 3
 

























# 36 "/usr/include/bits/select.h" 3












# 56 "/usr/include/bits/select.h" 3

# 72 "/usr/include/bits/select.h" 3

# 31 "/usr/include/sys/select.h" 2 3


 
# 1 "/usr/include/bits/sigset.h" 1 3
 





















typedef int __sig_atomic_t;

 


typedef struct
  {
    unsigned long int __val[(1024 / (8 * sizeof (unsigned long int))) ];
  } __sigset_t;




 





# 125 "/usr/include/bits/sigset.h" 3

# 34 "/usr/include/sys/select.h" 2 3




typedef __sigset_t sigset_t;


 


# 1 "/usr/include/time.h" 1 3
 

















 














# 51 "/usr/include/time.h" 3


# 61 "/usr/include/time.h" 3



# 72 "/usr/include/time.h" 3



# 84 "/usr/include/time.h" 3



# 96 "/usr/include/time.h" 3








 

struct timespec
  {
    __time_t tv_sec;		 
    long int tv_nsec;		 
  };





# 364 "/usr/include/time.h" 3



# 44 "/usr/include/sys/select.h" 2 3


# 1 "/usr/include/bits/time.h" 1 3
 


















 



# 57 "/usr/include/bits/time.h" 3








 

struct timeval
  {
    __time_t tv_sec;		 
    __suseconds_t tv_usec;	 
  };


# 46 "/usr/include/sys/select.h" 2 3



typedef __suseconds_t suseconds_t;




 
typedef long int __fd_mask;

 




 
typedef struct
  {
     





    __fd_mask __fds_bits[1024  / (8 * sizeof (__fd_mask)) ];


  } fd_set;

 



 
typedef __fd_mask fd_mask;

 




 






extern "C" { 

 




extern int select (int __nfds, fd_set *__restrict __readfds,
		   fd_set *__restrict __writefds,
		   fd_set *__restrict __exceptfds,
		   struct timeval *__restrict __timeout) throw () ;

# 116 "/usr/include/sys/select.h" 3


} 


# 215 "/usr/include/sys/types.h" 2 3


 
# 1 "/usr/include/sys/sysmacros.h" 1 3
 





















 








# 47 "/usr/include/sys/sysmacros.h" 3



# 218 "/usr/include/sys/types.h" 2 3









 


typedef __blkcnt_t blkcnt_t;	  



typedef __fsblkcnt_t fsblkcnt_t;  



typedef __fsfilcnt_t fsfilcnt_t;  


# 254 "/usr/include/sys/types.h" 3








} 


# 390 "/usr/include/stdlib.h" 2 3


 



 
extern long int random (void) throw () ;

 
extern void srandom (unsigned int __seed) throw () ;

 



extern char *initstate (unsigned int __seed, char *__statebuf,
			size_t __statelen) throw () ;

 

extern char *setstate (char *__statebuf) throw () ;



 



struct random_data
  {
    int32_t *fptr;		 
    int32_t *rptr;		 
    int32_t *state;		 
    int rand_type;		 
    int rand_deg;		 
    int rand_sep;		 
    int32_t *end_ptr;		 
  };

extern int random_r (struct random_data *__restrict __buf,
		     int32_t *__restrict __result) throw () ;

extern int srandom_r (unsigned int __seed, struct random_data *__buf) throw () ;

extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
			size_t __statelen,
			struct random_data *__restrict __buf) throw () ;

extern int setstate_r (char *__restrict __statebuf,
		       struct random_data *__restrict __buf) throw () ;




 
extern int rand (void) throw () ;
 
extern void srand (unsigned int __seed) throw () ;


 
extern int rand_r (unsigned int *__seed) throw () ;




 

 
extern double drand48 (void) throw () ;
extern double erand48 (unsigned short int __xsubi[3]) throw () ;

 
extern long int lrand48 (void) throw () ;
extern long int nrand48 (unsigned short int __xsubi[3]) throw () ;

 
extern long int mrand48 (void) throw () ;
extern long int jrand48 (unsigned short int __xsubi[3]) throw () ;

 
extern void srand48 (long int __seedval) throw () ;
extern unsigned short int *seed48 (unsigned short int __seed16v[3]) throw () ;
extern void lcong48 (unsigned short int __param[7]) throw () ;


 


struct drand48_data
  {
    unsigned short int __x[3];	 
    unsigned short int __old_x[3];  
    unsigned short int __c;	 
    unsigned short int __init;	 
    unsigned long long int __a;	 
  };

 
extern int drand48_r (struct drand48_data *__restrict __buffer,
		      double *__restrict __result) throw () ;
extern int erand48_r (unsigned short int __xsubi[3],
		      struct drand48_data *__restrict __buffer,
		      double *__restrict __result) throw () ;

 
extern int lrand48_r (struct drand48_data *__restrict __buffer,
		      long int *__restrict __result) throw () ;
extern int nrand48_r (unsigned short int __xsubi[3],
		      struct drand48_data *__restrict __buffer,
		      long int *__restrict __result) throw () ;

 
extern int mrand48_r (struct drand48_data *__restrict __buffer,
		      long int *__restrict __result) throw () ;
extern int jrand48_r (unsigned short int __xsubi[3],
		      struct drand48_data *__restrict __buffer,
		      long int *__restrict __result) throw () ;

 
extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
     throw () ;

extern int seed48_r (unsigned short int __seed16v[3],
		     struct drand48_data *__buffer) throw () ;

extern int lcong48_r (unsigned short int __param[7],
		      struct drand48_data *__buffer) throw () ;







 
extern void *malloc (size_t __size) throw ()   ;
 
extern void *calloc (size_t __nmemb, size_t __size)
     throw ()   ;



 

extern void *realloc (void *__ptr, size_t __size) throw ()   ;
 
extern void free (void *__ptr) throw () ;


 
extern void cfree (void *__ptr) throw () ;



# 1 "/usr/include/alloca.h" 1 3
 























# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 1 3






 


# 19 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3



 


 





 


# 61 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 





 


















 





 

 


# 126 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 




 

 


# 188 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3





 




 


# 269 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3
















 

 

# 317 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3




 













 







# 25 "/usr/include/alloca.h" 2 3


extern "C" { 

 


 
extern void *alloca (size_t __size) throw () ;





} 


# 546 "/usr/include/stdlib.h" 2 3




 
extern void *valloc (size_t __size) throw ()   ;








 
extern void abort (void) throw ()  __attribute__ ((__noreturn__));


 
extern int atexit (void (*__func) (void)) throw () ;


 

extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
     throw () ;


 


extern void exit (int __status) throw ()  __attribute__ ((__noreturn__));








 
extern char *getenv (__const char *__name) throw () ;

 

extern char *__secure_getenv (__const char *__name) throw () ;


 
 

extern int putenv (char *__string) throw () ;



 

extern int setenv (__const char *__name, __const char *__value, int __replace)
     throw () ;

 
extern int unsetenv (__const char *__name) throw () ;



 


extern int clearenv (void) throw () ;




 



extern char *mktemp (char *__template) throw () ;

 





extern int mkstemp (char *__template) throw () ;













 




extern char *mkdtemp (char *__template) throw () ;



 
extern int system (__const char *__command) throw () ;










 





extern char *realpath (__const char *__restrict __name,
		       char *__restrict __resolved) throw () ;



 


typedef int (*__compar_fn_t) (__const void *, __const void *);






 

extern void *bsearch (__const void *__key, __const void *__base,
		      size_t __nmemb, size_t __size, __compar_fn_t __compar);

 

extern void qsort (void *__base, size_t __nmemb, size_t __size,
		   __compar_fn_t __compar);


 
extern int abs (int __x) throw ()  __attribute__ ((__const__));
extern long int labs (long int __x) throw ()  __attribute__ ((__const__));






 

 
extern div_t div (int __numer, int __denom)
     throw ()  __attribute__ ((__const__));
extern ldiv_t ldiv (long int __numer, long int __denom)
     throw ()  __attribute__ ((__const__));








 


 


extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
		   int *__restrict __sign) throw () ;

 


extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
		   int *__restrict __sign) throw () ;

 


extern char *gcvt (double __value, int __ndigit, char *__buf) throw () ;



 
extern char *qecvt (long double __value, int __ndigit,
		    int *__restrict __decpt, int *__restrict __sign) throw () ;
extern char *qfcvt (long double __value, int __ndigit,
		    int *__restrict __decpt, int *__restrict __sign) throw () ;
extern char *qgcvt (long double __value, int __ndigit, char *__buf) throw () ;


 

extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
		   int *__restrict __sign, char *__restrict __buf,
		   size_t __len) throw () ;
extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
		   int *__restrict __sign, char *__restrict __buf,
		   size_t __len) throw () ;

extern int qecvt_r (long double __value, int __ndigit,
		    int *__restrict __decpt, int *__restrict __sign,
		    char *__restrict __buf, size_t __len) throw () ;
extern int qfcvt_r (long double __value, int __ndigit,
		    int *__restrict __decpt, int *__restrict __sign,
		    char *__restrict __buf, size_t __len) throw () ;




 

extern int mblen (__const char *__s, size_t __n) throw () ;
 

extern int mbtowc (wchar_t *__restrict __pwc,
		   __const char *__restrict __s, size_t __n) throw () ;
 

extern int wctomb (char *__s, wchar_t __wchar) throw () ;


 
extern size_t mbstowcs (wchar_t *__restrict  __pwcs,
			__const char *__restrict __s, size_t __n) throw () ;
 
extern size_t wcstombs (char *__restrict __s,
			__const wchar_t *__restrict __pwcs, size_t __n)
     throw () ;



 



extern int rpmatch (__const char *__response) throw () ;



# 811 "/usr/include/stdlib.h" 3









 






# 842 "/usr/include/stdlib.h" 3


# 852 "/usr/include/stdlib.h" 3



 


extern int getloadavg (double __loadavg[], int __nelem) throw () ;





} 


# 54 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_alloc.h" 2 3


# 1 "/usr/include/assert.h" 1 3
 

















 



# 33 "/usr/include/assert.h" 3











 




# 63 "/usr/include/assert.h" 3


extern "C" { 

 
extern void __assert_fail (__const char *__assertion, __const char *__file,
			   unsigned int __line, __const char *__function)
     throw ()  __attribute__ ((__noreturn__));

 
extern void __assert_perror_fail (int __errnum, __const char *__file,
				  unsigned int __line,
				  __const char *__function)
     throw ()  __attribute__ ((__noreturn__));


 

extern void __assert (const char *__assertion, const char *__file, int __line)
     throw ()  __attribute__ ((__noreturn__));


} 













 















# 56 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_alloc.h" 2 3












     
     
     
# 1 "/usr/include/pthread.h" 1 3
 
 
 
 
 
 
 
 
 
 
 
 
 






# 1 "/usr/include/sched.h" 1 3
 























 



# 1 "/usr/include/time.h" 1 3
 

















 














# 51 "/usr/include/time.h" 3


# 61 "/usr/include/time.h" 3



# 72 "/usr/include/time.h" 3



# 84 "/usr/include/time.h" 3



# 96 "/usr/include/time.h" 3




# 112 "/usr/include/time.h" 3




# 364 "/usr/include/time.h" 3



# 29 "/usr/include/sched.h" 2 3


 
# 1 "/usr/include/bits/sched.h" 1 3
 


























 





 











 
struct sched_param
  {
    int __sched_priority;
  };

extern "C" { 

 

extern int clone (int (*__fn) (void *__arg), void *__child_stack,
		  int __flags, void *__arg) throw () ;


} 



# 73 "/usr/include/bits/sched.h" 3

# 32 "/usr/include/sched.h" 2 3

 



extern "C" { 

 
extern int sched_setparam (__pid_t __pid, __const struct sched_param *__param)
     throw () ;

 
extern int sched_getparam (__pid_t __pid, struct sched_param *__param) throw () ;

 
extern int sched_setscheduler (__pid_t __pid, int __policy,
			       __const struct sched_param *__param) throw () ;

 
extern int sched_getscheduler (__pid_t __pid) throw () ;

 
extern int sched_yield (void) throw () ;

 
extern int sched_get_priority_max (int __algorithm) throw () ;

 
extern int sched_get_priority_min (int __algorithm) throw () ;

 
extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) throw () ;

} 


# 20 "/usr/include/pthread.h" 2 3

# 1 "/usr/include/time.h" 1 3
 

















 










extern "C" { 




 


# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 1 3






 


# 19 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3



 


 





 


# 61 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 





 


















 





 

 


# 126 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3


 




 

 


# 188 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3





 




 


# 269 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3
















 

 

# 317 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3




 













 







# 38 "/usr/include/time.h" 2 3


 

# 1 "/usr/include/bits/time.h" 1 3
 


















 







 


 





 


extern long int __sysconf (int);




 

 

 


 






# 73 "/usr/include/bits/time.h" 3

# 42 "/usr/include/time.h" 2 3


 













 
typedef __clock_t clock_t;




# 72 "/usr/include/time.h" 3



# 84 "/usr/include/time.h" 3



# 96 "/usr/include/time.h" 3




# 112 "/usr/include/time.h" 3





 
struct tm
{
  int tm_sec;			 
  int tm_min;			 
  int tm_hour;			 
  int tm_mday;			 
  int tm_mon;			 
  int tm_year;			 
  int tm_wday;			 
  int tm_yday;			 
  int tm_isdst;			 


  long int tm_gmtoff;		 
  __const char *tm_zone;	 




};



 
struct itimerspec
  {
    struct timespec it_interval;
    struct timespec it_value;
  };

 
struct sigevent;











 

extern clock_t clock (void) throw () ;

 
extern time_t time (time_t *__timer) throw () ;

 
extern double difftime (time_t __time1, time_t __time0)
     throw ()  __attribute__ ((__const__));

 
extern time_t mktime (struct tm *__tp) throw () ;


 


extern size_t strftime (char *__restrict __s, size_t __maxsize,
			__const char *__restrict __format,
			__const struct tm *__restrict __tp) throw () ;










 

extern struct tm *gmtime (__const time_t *__timer) throw () ;

 

extern struct tm *localtime (__const time_t *__timer) throw () ;


 

extern struct tm *gmtime_r (__const time_t *__restrict __timer,
			    struct tm *__restrict __tp) throw () ;

 

extern struct tm *localtime_r (__const time_t *__restrict __timer,
			       struct tm *__restrict __tp) throw () ;


 

extern char *asctime (__const struct tm *__tp) throw () ;

 
extern char *ctime (__const time_t *__timer) throw () ;


 

 

extern char *asctime_r (__const struct tm *__restrict __tp,
			char *__restrict __buf) throw () ;

 
extern char *ctime_r (__const time_t *__restrict __timer,
		      char *__restrict __buf) throw () ;



 
extern char *__tzname[2];	 
extern int __daylight;		 
extern long int __timezone;	 



 
extern char *tzname[2];

 

extern void tzset (void) throw () ;



extern int daylight;
extern long int timezone;



 

extern int stime (__const time_t *__when) throw () ;



 






 


 
extern time_t timegm (struct tm *__tp) throw () ;

 
extern time_t timelocal (struct tm *__tp) throw () ;

 
extern int dysize (int __year) throw ()   __attribute__ ((__const__));




 
extern int nanosleep (__const struct timespec *__requested_time,
		      struct timespec *__remaining) throw () ;


 
extern int clock_getres (clockid_t __clock_id, struct timespec *__res) throw () ;

 
extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) throw () ;

 
extern int clock_settime (clockid_t __clock_id, __const struct timespec *__tp)
     throw () ;

# 305 "/usr/include/time.h" 3



 
extern int timer_create (clockid_t __clock_id,
			 struct sigevent *__restrict __evp,
			 timer_t *__restrict __timerid) throw () ;

 
extern int timer_delete (timer_t __timerid) throw () ;

 
extern int timer_settime (timer_t __timerid, int __flags,
			  __const struct itimerspec *__restrict __value,
			  struct itimerspec *__restrict __ovalue) throw () ;

 
extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
     throw () ;

 
extern int timer_getoverrun (timer_t __timerid) throw () ;



# 349 "/usr/include/time.h" 3


# 359 "/usr/include/time.h" 3



} 




# 21 "/usr/include/pthread.h" 2 3



# 1 "/usr/include/signal.h" 1 3
 

















 











extern "C" { 

# 1 "/usr/include/bits/sigset.h" 1 3
 


















# 33 "/usr/include/bits/sigset.h" 3



 





# 125 "/usr/include/bits/sigset.h" 3

# 33 "/usr/include/signal.h" 2 3


 

















# 369 "/usr/include/signal.h" 3


} 


# 24 "/usr/include/pthread.h" 2 3

# 1 "/usr/include/bits/pthreadtypes.h" 1 3
 
 
 
 
 
 
 
 
 
 
 
 
 





# 144 "/usr/include/bits/pthreadtypes.h" 3

# 25 "/usr/include/pthread.h" 2 3

# 1 "/usr/include/bits/initspin.h" 1 3
 


















 




 


# 26 "/usr/include/pthread.h" 2 3



extern "C" { 

 

























 

enum
{
  PTHREAD_CREATE_JOINABLE,

  PTHREAD_CREATE_DETACHED

};

enum
{
  PTHREAD_INHERIT_SCHED,

  PTHREAD_EXPLICIT_SCHED

};

enum
{
  PTHREAD_SCOPE_SYSTEM,

  PTHREAD_SCOPE_PROCESS

};

enum
{
  PTHREAD_MUTEX_TIMED_NP,
  PTHREAD_MUTEX_RECURSIVE_NP,
  PTHREAD_MUTEX_ERRORCHECK_NP,
  PTHREAD_MUTEX_ADAPTIVE_NP











};

enum
{
  PTHREAD_PROCESS_PRIVATE,

  PTHREAD_PROCESS_SHARED

};

# 118 "/usr/include/pthread.h" 3




 






 

struct _pthread_cleanup_buffer
{
  void (*__routine) (void *);		   
  void *__arg;				   
  int __canceltype;			   
  struct _pthread_cleanup_buffer *__prev;  
};

 

enum
{
  PTHREAD_CANCEL_ENABLE,

  PTHREAD_CANCEL_DISABLE

};
enum
{
  PTHREAD_CANCEL_DEFERRED,

  PTHREAD_CANCEL_ASYNCHRONOUS

};



 

 


extern int pthread_create (pthread_t *__restrict __thread,
			   __const pthread_attr_t *__restrict __attr,
			   void *(*__start_routine) (void *),
			   void *__restrict __arg) throw () ;

 
extern pthread_t pthread_self (void) throw () ;

 
extern int pthread_equal (pthread_t __thread1, pthread_t __thread2) throw () ;

 
extern void pthread_exit (void *__retval)
     throw ()  __attribute__ ((__noreturn__));

 


extern int pthread_join (pthread_t __th, void **__thread_return) throw () ;

 



extern int pthread_detach (pthread_t __th) throw () ;


 

 


extern int pthread_attr_init (pthread_attr_t *__attr) throw () ;

 
extern int pthread_attr_destroy (pthread_attr_t *__attr) throw () ;

 
extern int pthread_attr_setdetachstate (pthread_attr_t *__attr,
					int __detachstate) throw () ;

 
extern int pthread_attr_getdetachstate (__const pthread_attr_t *__attr,
					int *__detachstate) throw () ;

 
extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
				       __const struct sched_param *__restrict
				       __param) throw () ;

 
extern int pthread_attr_getschedparam (__const pthread_attr_t *__restrict
				       __attr,
				       struct sched_param *__restrict __param)
     throw () ;

 
extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy)
     throw () ;

 
extern int pthread_attr_getschedpolicy (__const pthread_attr_t *__restrict
					__attr, int *__restrict __policy)
     throw () ;

 
extern int pthread_attr_setinheritsched (pthread_attr_t *__attr,
					 int __inherit) throw () ;

 
extern int pthread_attr_getinheritsched (__const pthread_attr_t *__restrict
					 __attr, int *__restrict __inherit)
     throw () ;

 
extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope)
     throw () ;

 
extern int pthread_attr_getscope (__const pthread_attr_t *__restrict __attr,
				  int *__restrict __scope) throw () ;

# 254 "/usr/include/pthread.h" 3


 



extern int pthread_attr_setstackaddr (pthread_attr_t *__attr,
				      void *__stackaddr) throw () ;

 
extern int pthread_attr_getstackaddr (__const pthread_attr_t *__restrict
				      __attr, void **__restrict __stackaddr)
     throw () ;

# 279 "/usr/include/pthread.h" 3


 


extern int pthread_attr_setstacksize (pthread_attr_t *__attr,
				      size_t __stacksize) throw () ;

 
extern int pthread_attr_getstacksize (__const pthread_attr_t *__restrict
				      __attr, size_t *__restrict __stacksize)
     throw () ;






 

 

extern int pthread_setschedparam (pthread_t __target_thread, int __policy,
				  __const struct sched_param *__param)
     throw () ;

 
extern int pthread_getschedparam (pthread_t __target_thread,
				  int *__restrict __policy,
				  struct sched_param *__restrict __param)
     throw () ;

















 

 

extern int pthread_mutex_init (pthread_mutex_t *__restrict __mutex,
			       __const pthread_mutexattr_t *__restrict
			       __mutex_attr) throw () ;

 
extern int pthread_mutex_destroy (pthread_mutex_t *__mutex) throw () ;

 
extern int pthread_mutex_trylock (pthread_mutex_t *__mutex) throw () ;

 
extern int pthread_mutex_lock (pthread_mutex_t *__mutex) throw () ;








 
extern int pthread_mutex_unlock (pthread_mutex_t *__mutex) throw () ;


 

 

extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr) throw () ;

 
extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr) throw () ;

 
extern int pthread_mutexattr_getpshared (__const pthread_mutexattr_t *
					 __restrict __attr,
					 int *__restrict __pshared) throw () ;

 
extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr,
					 int __pshared) throw () ;

# 383 "/usr/include/pthread.h" 3



 

 

extern int pthread_cond_init (pthread_cond_t *__restrict __cond,
			      __const pthread_condattr_t *__restrict
			      __cond_attr) throw () ;

 
extern int pthread_cond_destroy (pthread_cond_t *__cond) throw () ;

 
extern int pthread_cond_signal (pthread_cond_t *__cond) throw () ;

 
extern int pthread_cond_broadcast (pthread_cond_t *__cond) throw () ;

 

extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
			      pthread_mutex_t *__restrict __mutex) throw () ;

 



extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
				   pthread_mutex_t *__restrict __mutex,
				   __const struct timespec *__restrict
				   __abstime) throw () ;

 

 
extern int pthread_condattr_init (pthread_condattr_t *__attr) throw () ;

 
extern int pthread_condattr_destroy (pthread_condattr_t *__attr) throw () ;

 
extern int pthread_condattr_getpshared (__const pthread_condattr_t *
					__restrict __attr,
					int *__restrict __pshared) throw () ;

 
extern int pthread_condattr_setpshared (pthread_condattr_t *__attr,
					int __pshared) throw () ;


# 501 "/usr/include/pthread.h" 3


# 545 "/usr/include/pthread.h" 3



 

 





extern int pthread_key_create (pthread_key_t *__key,
			       void (*__destr_function) (void *)) throw () ;

 
extern int pthread_key_delete (pthread_key_t __key) throw () ;

 
extern int pthread_setspecific (pthread_key_t __key,
				__const void *__pointer) throw () ;

 
extern void *pthread_getspecific (pthread_key_t __key) throw () ;


 

 



extern int pthread_once (pthread_once_t *__once_control,
			 void (*__init_routine) (void)) throw () ;


 

 

extern int pthread_setcancelstate (int __state, int *__oldstate) throw () ;

 

extern int pthread_setcanceltype (int __type, int *__oldtype) throw () ;

 
extern int pthread_cancel (pthread_t __thread) throw () ;

 


extern void pthread_testcancel (void) throw () ;


 










extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *__buffer,
				   void (*__routine) (void *),
				   void *__arg) throw () ;

 





extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *__buffer,
				  int __execute) throw () ;

 


# 644 "/usr/include/pthread.h" 3










 
# 1 "/usr/include/bits/sigthread.h" 1 3
 

























 

 

extern int pthread_sigmask (int __how,
			    __const __sigset_t *__restrict __newmask,
			    __sigset_t *__restrict __oldmask)throw () ;

 
extern int pthread_kill (pthread_t __thread, int __signo) throw () ;


# 655 "/usr/include/pthread.h" 2 3



 

 










extern int pthread_atfork (void (*__prepare) (void),
			   void (*__parent) (void),
			   void (*__child) (void)) throw () ;

 


extern void pthread_kill_other_threads_np (void) throw () ;

} 


# 71 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_alloc.h" 2 3








# 87 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_alloc.h" 3

# 97 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_alloc.h" 3

# 115 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_alloc.h" 3









 





 
 









template <int __inst>
class __malloc_alloc_template {

private:

  static void* _S_oom_malloc(size_t);
  static void* _S_oom_realloc(void*, size_t);


  static void (* __malloc_alloc_oom_handler)();


public:

  static void* allocate(size_t __n)
  {
    void* __result = malloc(__n);
    if (0 == __result) __result = _S_oom_malloc(__n);
    return __result;
  }

  static void deallocate(void* __p, size_t  )
  {
    free(__p);
  }

  static void* reallocate(void* __p, size_t  , size_t __new_sz)
  {
    void* __result = realloc(__p, __new_sz);
    if (0 == __result) __result = _S_oom_realloc(__p, __new_sz);
    return __result;
  }

  static void (* __set_malloc_handler(void (*__f)()))()
  {
    void (* __old)() = __malloc_alloc_oom_handler;
    __malloc_alloc_oom_handler = __f;
    return(__old);
  }

};

 


template <int __inst>
void (* __malloc_alloc_template<__inst>::__malloc_alloc_oom_handler)() = 0;


template <int __inst>
void*
__malloc_alloc_template<__inst>::_S_oom_malloc(size_t __n)
{
    void (* __my_malloc_handler)();
    void* __result;

    for (;;) {
        __my_malloc_handler = __malloc_alloc_oom_handler;
        if (0 == __my_malloc_handler) { throw bad_alloc() ; }
        (*__my_malloc_handler)();
        __result = malloc(__n);
        if (__result) return(__result);
    }
}

template <int __inst>
void* __malloc_alloc_template<__inst>::_S_oom_realloc(void* __p, size_t __n)
{
    void (* __my_malloc_handler)();
    void* __result;

    for (;;) {
        __my_malloc_handler = __malloc_alloc_oom_handler;
        if (0 == __my_malloc_handler) { throw bad_alloc() ; }
        (*__my_malloc_handler)();
        __result = realloc(__p, __n);
        if (__result) return(__result);
    }
}

typedef __malloc_alloc_template<0> malloc_alloc;

template<class _Tp, class _Alloc>
class simple_alloc {

public:
    static _Tp* allocate(size_t __n)
      { return 0 == __n ? 0 : (_Tp*) _Alloc::allocate(__n * sizeof (_Tp)); }
    static _Tp* allocate(void)
      { return (_Tp*) _Alloc::allocate(sizeof (_Tp)); }
    static void deallocate(_Tp* __p, size_t __n)
      { if (0 != __n) _Alloc::deallocate(__p, __n * sizeof (_Tp)); }
    static void deallocate(_Tp* __p)
      { _Alloc::deallocate(__p, sizeof (_Tp)); }
};

 
 
 
 
 
template <class _Alloc>
class debug_alloc {

private:

  enum {_S_extra = 8};   
                         
                         

public:

  static void* allocate(size_t __n)
  {
    char* __result = (char*)_Alloc::allocate(__n + _S_extra);
    *(size_t*)__result = __n;
    return __result + _S_extra;
  }

  static void deallocate(void* __p, size_t __n)
  {
    char* __real_p = (char*)__p - _S_extra;
    (static_cast<void>  (( *(size_t*)__real_p == __n ) ? 0 :	(__assert_fail ("*(size_t*)__real_p == __n" , "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_alloc.h", 263, __PRETTY_FUNCTION__ ), 0))) ;
    _Alloc::deallocate(__real_p, __n + _S_extra);
  }

  static void* reallocate(void* __p, size_t __old_sz, size_t __new_sz)
  {
    char* __real_p = (char*)__p - _S_extra;
    (static_cast<void>  (( *(size_t*)__real_p == __old_sz ) ? 0 :	(__assert_fail ("*(size_t*)__real_p == __old_sz" , "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_alloc.h", 270, __PRETTY_FUNCTION__ ), 0))) ;
    char* __result = (char*)
      _Alloc::reallocate(__real_p, __old_sz + _S_extra, __new_sz + _S_extra);
    *(size_t*)__result = __new_sz;
    return __result + _S_extra;
  }

};










 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 







template <bool threads, int inst>
class __default_alloc_template {

private:
   
   

    enum {_ALIGN = 8};
    enum {_MAX_BYTES = 128};
    enum {_NFREELISTS = _MAX_BYTES/_ALIGN};

  static size_t
  _S_round_up(size_t __bytes)
    { return (((__bytes) + _ALIGN-1) & ~(_ALIGN - 1)); }

private :
  union _Obj {
        union _Obj* _M_free_list_link;
        char _M_client_data[1];     
  };
private:




    static _Obj* volatile  _S_free_list[_NFREELISTS];

  static  size_t _S_freelist_index(size_t __bytes) {
        return (((__bytes) + _ALIGN-1)/_ALIGN - 1);
  }

   
  static void* _S_refill(size_t __n);
   
   
  static char* _S_chunk_alloc(size_t __size, int& __nobjs);

   
  static char* _S_start_free;
  static char* _S_end_free;
  static size_t _S_heap_size;








    static pthread_mutex_t _S_node_allocator_lock;






# 389 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_alloc.h" 3


    class _Lock {
        public:
            _Lock() { if (threads) pthread_mutex_lock(&_S_node_allocator_lock) ; }
            ~_Lock() { if (threads) pthread_mutex_unlock(&_S_node_allocator_lock) ; }
    };
    friend class _Lock;

public:

   
  static void* allocate(size_t __n)
  {
    _Obj* volatile * __my_free_list;
    _Obj*   __result;

    if (__n > (size_t) _MAX_BYTES) {
        return(malloc_alloc::allocate(__n));
    }
    __my_free_list = _S_free_list + _S_freelist_index(__n);
     
     
     

         
        _Lock __lock_instance;

    __result = *__my_free_list;
    if (__result == 0) {
        void* __r = _S_refill(_S_round_up(__n));
        return __r;
    }
    *__my_free_list = __result -> _M_free_list_link;
    return (__result);
  };

   
  static void deallocate(void* __p, size_t __n)
  {
    _Obj* __q = (_Obj*)__p;
    _Obj* volatile * __my_free_list;

    if (__n > (size_t) _MAX_BYTES) {
        malloc_alloc::deallocate(__p, __n);
        return;
    }
    __my_free_list = _S_free_list + _S_freelist_index(__n);
     

         
        _Lock __lock_instance;

    __q -> _M_free_list_link = *__my_free_list;
    *__my_free_list = __q;
     
  }

  static void* reallocate(void* __p, size_t __old_sz, size_t __new_sz);

} ;

typedef __default_alloc_template< true , 0> alloc;
typedef __default_alloc_template<false, 0> single_client_alloc;



 
 
 
 
template <bool __threads, int __inst>
char*
__default_alloc_template<__threads, __inst>::_S_chunk_alloc(size_t __size,
                                                            int& __nobjs)
{
    char* __result;
    size_t __total_bytes = __size * __nobjs;
    size_t __bytes_left = _S_end_free - _S_start_free;

    if (__bytes_left >= __total_bytes) {
        __result = _S_start_free;
        _S_start_free += __total_bytes;
        return(__result);
    } else if (__bytes_left >= __size) {
        __nobjs = (int)(__bytes_left/__size);
        __total_bytes = __size * __nobjs;
        __result = _S_start_free;
        _S_start_free += __total_bytes;
        return(__result);
    } else {
        size_t __bytes_to_get =
	  2 * __total_bytes + _S_round_up(_S_heap_size >> 4);
         
        if (__bytes_left > 0) {
            _Obj* volatile * __my_free_list =
                        _S_free_list + _S_freelist_index(__bytes_left);

            ((_Obj*)_S_start_free) -> _M_free_list_link = *__my_free_list;
            *__my_free_list = (_Obj*)_S_start_free;
        }
        _S_start_free = (char*)malloc(__bytes_to_get);
        if (0 == _S_start_free) {
            size_t __i;
            _Obj* volatile * __my_free_list;
	    _Obj* __p;
             
             
             
            for (__i = __size; __i <= _MAX_BYTES; __i += _ALIGN) {
                __my_free_list = _S_free_list + _S_freelist_index(__i);
                __p = *__my_free_list;
                if (0 != __p) {
                    *__my_free_list = __p -> _M_free_list_link;
                    _S_start_free = (char*)__p;
                    _S_end_free = _S_start_free + __i;
                    return(_S_chunk_alloc(__size, __nobjs));
                     
                     
                }
            }
	    _S_end_free = 0;	 
            _S_start_free = (char*)malloc_alloc::allocate(__bytes_to_get);
             
             
             
        }
        _S_heap_size += __bytes_to_get;
        _S_end_free = _S_start_free + __bytes_to_get;
        return(_S_chunk_alloc(__size, __nobjs));
    }
}


 
 
 
template <bool __threads, int __inst>
void*
__default_alloc_template<__threads, __inst>::_S_refill(size_t __n)
{
    int __nobjs = 20;
    char* __chunk = _S_chunk_alloc(__n, __nobjs);
    _Obj* volatile * __my_free_list;
    _Obj* __result;
    _Obj* __current_obj;
    _Obj* __next_obj;
    int __i;

    if (1 == __nobjs) return(__chunk);
    __my_free_list = _S_free_list + _S_freelist_index(__n);

     
      __result = (_Obj*)__chunk;
      *__my_free_list = __next_obj = (_Obj*)(__chunk + __n);
      for (__i = 1; ; __i++) {
        __current_obj = __next_obj;
        __next_obj = (_Obj*)((char*)__next_obj + __n);
        if (__nobjs - 1 == __i) {
            __current_obj -> _M_free_list_link = 0;
            break;
        } else {
            __current_obj -> _M_free_list_link = __next_obj;
        }
      }
    return(__result);
}

template <bool threads, int inst>
void*
__default_alloc_template<threads, inst>::reallocate(void* __p,
                                                    size_t __old_sz,
                                                    size_t __new_sz)
{
    void* __result;
    size_t __copy_sz;

    if (__old_sz > (size_t) _MAX_BYTES && __new_sz > (size_t) _MAX_BYTES) {
        return(realloc(__p, __new_sz));
    }
    if (_S_round_up(__old_sz) == _S_round_up(__new_sz)) return(__p);
    __result = allocate(__new_sz);
    __copy_sz = __new_sz > __old_sz? __old_sz : __new_sz;
    memcpy(__result, __p, __copy_sz);
    deallocate(__p, __old_sz);
    return(__result);
}


    template <bool __threads, int __inst>
    pthread_mutex_t
    __default_alloc_template<__threads, __inst>::_S_node_allocator_lock
        = {0, 0, 0, PTHREAD_MUTEX_TIMED_NP, { 0, 0 } } ;









# 602 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_alloc.h" 3


# 689 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_alloc.h" 3


template <bool __threads, int __inst>
char* __default_alloc_template<__threads, __inst>::_S_start_free = 0;

template <bool __threads, int __inst>
char* __default_alloc_template<__threads, __inst>::_S_end_free = 0;

template <bool __threads, int __inst>
size_t __default_alloc_template<__threads, __inst>::_S_heap_size = 0;

template <bool __threads, int __inst>
__default_alloc_template<__threads, __inst>::_Obj* volatile 
__default_alloc_template<__threads, __inst> ::_S_free_list[
    _NFREELISTS
] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
 
 
 










 
 
 
 
 
 
 



template <class _Tp>
class allocator {
  typedef alloc _Alloc;           
public:
  typedef size_t     size_type;
  typedef ptrdiff_t  difference_type;
  typedef _Tp*       pointer;
  typedef const _Tp* const_pointer;
  typedef _Tp&       reference;
  typedef const _Tp& const_reference;
  typedef _Tp        value_type;

  template <class _Tp1> struct rebind {
    typedef allocator<_Tp1> other;
  };

  allocator() throw()  {}
  allocator(const allocator&) throw()  {}
  template <class _Tp1> allocator(const allocator<_Tp1>&) throw()  {}
  ~allocator() throw()  {}

  pointer address(reference __x) const { return &__x; }
  const_pointer address(const_reference __x) const { return &__x; }

   
   
  _Tp* allocate(size_type __n, const void* = 0) {
    return __n != 0 ? static_cast<_Tp*>(_Alloc::allocate(__n * sizeof(_Tp)))
                    : 0;
  }

   
  void deallocate(pointer __p, size_type __n)
    { _Alloc::deallocate(__p, __n * sizeof(_Tp)); }

  size_type max_size() const throw() 
    { return size_t(-1) / sizeof(_Tp); }

  void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); }
  void destroy(pointer __p) { __p->~_Tp(); }
};

template<>
class allocator<void> {
  typedef size_t      size_type;
  typedef ptrdiff_t   difference_type;
  typedef void*       pointer;
  typedef const void* const_pointer;
  typedef void        value_type;

  template <class _Tp1> struct rebind {
    typedef allocator<_Tp1> other;
  };
};


template <class _T1, class _T2>
inline bool operator==(const allocator<_T1>&, const allocator<_T2>&)
{
  return true;
}

template <class _T1, class _T2>
inline bool operator!=(const allocator<_T1>&, const allocator<_T2>&)
{
  return false;
}

 
 
 
 
 
 

template <class _Tp, class _Alloc>
struct __allocator {
  _Alloc __underlying_alloc;

  typedef size_t    size_type;
  typedef ptrdiff_t difference_type;
  typedef _Tp*       pointer;
  typedef const _Tp* const_pointer;
  typedef _Tp&       reference;
  typedef const _Tp& const_reference;
  typedef _Tp        value_type;

  template <class _Tp1> struct rebind {
    typedef __allocator<_Tp1, _Alloc> other;
  };

  __allocator() throw()  {}
  __allocator(const __allocator& __a) throw() 
    : __underlying_alloc(__a.__underlying_alloc) {}
  template <class _Tp1>
  __allocator(const __allocator<_Tp1, _Alloc>& __a) throw() 
    : __underlying_alloc(__a.__underlying_alloc) {}
  ~__allocator() throw()  {}

  pointer address(reference __x) const { return &__x; }
  const_pointer address(const_reference __x) const { return &__x; }

   
  _Tp* allocate(size_type __n, const void* = 0) {
    return __n != 0
        ? static_cast<_Tp*>(__underlying_alloc.allocate(__n * sizeof(_Tp)))
        : 0;
  }

   
  void deallocate(pointer __p, size_type __n)
    { __underlying_alloc.deallocate(__p, __n * sizeof(_Tp)); }

  size_type max_size() const throw() 
    { return size_t(-1) / sizeof(_Tp); }

  void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); }
  void destroy(pointer __p) { __p->~_Tp(); }
};

template <class _Alloc>
class __allocator<void, _Alloc> {
  typedef size_t      size_type;
  typedef ptrdiff_t   difference_type;
  typedef void*       pointer;
  typedef const void* const_pointer;
  typedef void        value_type;

  template <class _Tp1> struct rebind {
    typedef __allocator<_Tp1, _Alloc> other;
  };
};

template <class _Tp, class _Alloc>
inline bool operator==(const __allocator<_Tp, _Alloc>& __a1,
                       const __allocator<_Tp, _Alloc>& __a2)
{
  return __a1.__underlying_alloc == __a2.__underlying_alloc;
}


template <class _Tp, class _Alloc>
inline bool operator!=(const __allocator<_Tp, _Alloc>& __a1,
                       const __allocator<_Tp, _Alloc>& __a2)
{
  return __a1.__underlying_alloc != __a2.__underlying_alloc;
}


 
 
 

template <int inst>
inline bool operator==(const __malloc_alloc_template<inst>&,
                       const __malloc_alloc_template<inst>&)
{
  return true;
}


template <int __inst>
inline bool operator!=(const __malloc_alloc_template<__inst>&,
                       const __malloc_alloc_template<__inst>&)
{
  return false;
}



template <bool __threads, int __inst>
inline bool operator==(const __default_alloc_template<__threads, __inst>&,
                       const __default_alloc_template<__threads, __inst>&)
{
  return true;
}


template <bool __threads, int __inst>
inline bool operator!=(const __default_alloc_template<__threads, __inst>&,
                       const __default_alloc_template<__threads, __inst>&)
{
  return false;
}



template <class _Alloc>
inline bool operator==(const debug_alloc<_Alloc>&,
                       const debug_alloc<_Alloc>&) {
  return true;
}


template <class _Alloc>
inline bool operator!=(const debug_alloc<_Alloc>&,
                       const debug_alloc<_Alloc>&) {
  return false;
}


 
 
 
 
 
 

 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 

 

template <class _Tp, class _Allocator>
struct _Alloc_traits
{
  static const bool _S_instanceless = false;
  typedef typename _Allocator::   rebind<_Tp>::other
          allocator_type;
};

template <class _Tp, class _Allocator>
const bool _Alloc_traits<_Tp, _Allocator>::_S_instanceless;

 

template <class _Tp, class _Tp1>
struct _Alloc_traits<_Tp, allocator<_Tp1> >
{
  static const bool _S_instanceless = true;
  typedef simple_alloc<_Tp, alloc> _Alloc_type;
  typedef allocator<_Tp> allocator_type;
};

 

template <class _Tp, int __inst>
struct _Alloc_traits<_Tp, __malloc_alloc_template<__inst> >
{
  static const bool _S_instanceless = true;
  typedef simple_alloc<_Tp, __malloc_alloc_template<__inst> > _Alloc_type;
  typedef __allocator<_Tp, __malloc_alloc_template<__inst> > allocator_type;
};


template <class _Tp, bool __threads, int __inst>
struct _Alloc_traits<_Tp, __default_alloc_template<__threads, __inst> >
{
  static const bool _S_instanceless = true;
  typedef simple_alloc<_Tp, __default_alloc_template<__threads, __inst> >
          _Alloc_type;
  typedef __allocator<_Tp, __default_alloc_template<__threads, __inst> >
          allocator_type;
};


template <class _Tp, class _Alloc>
struct _Alloc_traits<_Tp, debug_alloc<_Alloc> >
{
  static const bool _S_instanceless = true;
  typedef simple_alloc<_Tp, debug_alloc<_Alloc> > _Alloc_type;
  typedef __allocator<_Tp, debug_alloc<_Alloc> > allocator_type;
};

 
 

template <class _Tp, class _Tp1, int __inst>
struct _Alloc_traits<_Tp,
                     __allocator<_Tp1, __malloc_alloc_template<__inst> > >
{
  static const bool _S_instanceless = true;
  typedef simple_alloc<_Tp, __malloc_alloc_template<__inst> > _Alloc_type;
  typedef __allocator<_Tp, __malloc_alloc_template<__inst> > allocator_type;
};


template <class _Tp, class _Tp1, bool __thr, int __inst>
struct _Alloc_traits<_Tp,
                      __allocator<_Tp1,
                                  __default_alloc_template<__thr, __inst> > >
{
  static const bool _S_instanceless = true;
  typedef simple_alloc<_Tp, __default_alloc_template<__thr,__inst> >
          _Alloc_type;
  typedef __allocator<_Tp, __default_alloc_template<__thr,__inst> >
          allocator_type;
};


template <class _Tp, class _Tp1, class _Alloc>
struct _Alloc_traits<_Tp, __allocator<_Tp1, debug_alloc<_Alloc> > >
{
  static const bool _S_instanceless = true;
  typedef simple_alloc<_Tp, debug_alloc<_Alloc> > _Alloc_type;
  typedef __allocator<_Tp, debug_alloc<_Alloc> > allocator_type;
};








 





 
 
 
# 21 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/alloc.h" 2 3



# 40 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/alloc.h" 3




 
 
 
# 39 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/std/bastring.h" 2 3


extern "C++" {
class istream; class ostream;

# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/iterator" 1 3
 





























# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_relops.h" 1 3
 

























 






 

template <class _Tp>
inline bool operator!=(const _Tp& __x, const _Tp& __y) {
  return !(__x == __y);
}

template <class _Tp>
inline bool operator>(const _Tp& __x, const _Tp& __y) {
  return __y < __x;
}

template <class _Tp>
inline bool operator<=(const _Tp& __x, const _Tp& __y) {
  return !(__y < __x);
}

template <class _Tp>
inline bool operator>=(const _Tp& __x, const _Tp& __y) {
  return !(__x < __y);
}

 



 
 
 
# 31 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/iterator" 2 3

# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 1 3
# 342 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stddef.h" 3

# 32 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/iterator" 2 3




# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/iostream.h" 1 3
 

























#pragma interface



# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/streambuf.h" 1 3
 


























#pragma interface


   



extern "C" {
# 1 "/usr/include/libio.h" 1 3
 































 

















 

# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stdarg.h" 1 3
 
































































 






typedef void *__gnuc_va_list;



 

# 122 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stdarg.h" 3




















# 209 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stdarg.h" 3




# 53 "/usr/include/libio.h" 2 3







# 72 "/usr/include/libio.h" 3


 

















# 103 "/usr/include/libio.h" 3











 

























 



















struct _IO_jump_t;  struct _IO_FILE;

 







typedef void _IO_lock_t;



 

struct _IO_marker {
  struct _IO_marker *_next;
  struct _IO_FILE *_sbuf;
   

   
  int _pos;
# 192 "/usr/include/libio.h" 3

};

 
enum __codecvt_result
{
  __codecvt_ok,
  __codecvt_partial,
  __codecvt_error,
  __codecvt_noconv
};

# 259 "/usr/include/libio.h" 3


struct _IO_FILE {
  int _flags;		 


   
   
  char* _IO_read_ptr;	 
  char* _IO_read_end;	 
  char* _IO_read_base;	 
  char* _IO_write_base;	 
  char* _IO_write_ptr;	 
  char* _IO_write_end;	 
  char* _IO_buf_base;	 
  char* _IO_buf_end;	 
   
  char *_IO_save_base;  
  char *_IO_backup_base;   
  char *_IO_save_end;  

  struct _IO_marker *_markers;

  struct _IO_FILE *_chain;

  int _fileno;
  int _blksize;
  __off_t   _old_offset;  


   
  unsigned short _cur_column;
  signed char _vtable_offset;
  char _shortbuf[1];

   

  _IO_lock_t *_lock;








  __off64_t   _offset;





  void *__pad1;
  void *__pad2;

  int _mode;
   
  char _unused2[15 * sizeof (int) - 2 * sizeof (void *)];

};





struct _IO_FILE_plus;

extern struct _IO_FILE_plus _IO_2_1_stdin_;
extern struct _IO_FILE_plus _IO_2_1_stdout_;
extern struct _IO_FILE_plus _IO_2_1_stderr_;











 

 

typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);

 





typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
				 size_t __n);

 





typedef int __io_seek_fn (void *__cookie, __off64_t   *__pos, int __w);

 
typedef int __io_close_fn (void *__cookie);


# 389 "/usr/include/libio.h" 3




extern "C" {


extern int __underflow (_IO_FILE *) throw () ;
extern int __uflow (_IO_FILE *) throw () ;
extern int __overflow (_IO_FILE *, int) throw () ;
extern wint_t   __wunderflow (_IO_FILE *) throw () ;
extern wint_t   __wuflow (_IO_FILE *) throw () ;
extern wint_t   __woverflow (_IO_FILE *, wint_t  ) throw () ;
























extern int _IO_getc (_IO_FILE *__fp) throw () ;
extern int _IO_putc (int __c, _IO_FILE *__fp) throw () ;
extern int _IO_feof (_IO_FILE *__fp) throw () ;
extern int _IO_ferror (_IO_FILE *__fp) throw () ;

extern int _IO_peekc_locked (_IO_FILE *__fp) throw () ;

 



extern void _IO_flockfile (_IO_FILE *) throw () ;
extern void _IO_funlockfile (_IO_FILE *) throw () ;
extern int _IO_ftrylockfile (_IO_FILE *) throw () ;
















extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
			__gnuc_va_list , int *__restrict) throw () ;
extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
			 __gnuc_va_list ) throw () ;
extern __ssize_t   _IO_padn (_IO_FILE *, int, __ssize_t  ) throw () ;
extern size_t   _IO_sgetn (_IO_FILE *, void *, size_t  ) throw () ;

extern __off64_t   _IO_seekoff (_IO_FILE *, __off64_t  , int, int) throw () ;
extern __off64_t   _IO_seekpos (_IO_FILE *, __off64_t  , int) throw () ;

extern void _IO_free_backup_area (_IO_FILE *) throw () ;

# 511 "/usr/include/libio.h" 3



}



# 36 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/streambuf.h" 2 3

}
 

# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stdarg.h" 1 3
 
































































 










 



 

















void va_end (__gnuc_va_list);		 


 



 












 























 
 













# 175 "/usr/lib/gcc-lib/i386-linux/2.95.4/include/stdarg.h" 3


 




 

 

 

typedef __gnuc_va_list va_list;
























# 40 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/streambuf.h" 2 3

























extern "C++" {
class istream;  
class ostream; class streambuf;

 




typedef __off64_t   streamoff;
typedef __off64_t   streampos;




typedef __ssize_t   streamsize;

typedef unsigned long __fmtflags;
typedef unsigned char __iostate;

struct _ios_fields
{  
    streambuf *_strbuf;
    ostream* _tie;
    int _width;
    __fmtflags _flags;
    wchar_t   _fill;
    __iostate _state;
    __iostate _exceptions;
    int _precision;

    void *_arrays;  
};















# 124 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/streambuf.h" 3


class ios : public _ios_fields {
  ios& operator=(ios&);   
  ios (const ios&);  
  public:
    typedef __fmtflags fmtflags;
    typedef int iostate;
    typedef int openmode;
    typedef __ssize_t   streamsize;
    enum io_state {
	goodbit = 0 ,
	eofbit = 1 ,
	failbit = 2 ,
	badbit = 4  };
    enum open_mode {
	in = 1 ,
	out = 2 ,
	ate = 4 ,
	app = 8 ,
	trunc = 16 ,
	nocreate = 32 ,
	noreplace = 64 ,
	bin = 128 ,  
	binary = 128  };
    enum seek_dir { beg, cur, end};
    typedef enum seek_dir seekdir;
     
    enum { skipws= 01 ,
	   left= 02 , right= 04 , internal= 010 ,
	   dec= 020 , oct= 040 , hex= 0100 ,
	   showbase= 0200 , showpoint= 0400 ,
	   uppercase= 01000 , showpos= 02000 ,
	   scientific= 04000 , fixed= 010000 ,
	   unitbuf= 020000 , stdio= 040000 



	   };
    enum {  
	basefield=dec+oct+hex,
	floatfield = scientific+fixed,
	adjustfield = left+right+internal
    };

# 177 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/streambuf.h" 3


    ostream* tie() const { return _tie; }
    ostream* tie(ostream* val) { ostream* save=_tie; _tie=val; return save; }

     
    wchar_t   fill() const { return _fill; }
    wchar_t   fill(wchar_t   newf)
	{wchar_t   oldf = _fill; _fill = newf; return oldf;}
    fmtflags flags() const { return _flags; }
    fmtflags flags(fmtflags new_val) {
	fmtflags old_val = _flags; _flags = new_val; return old_val; }
    int precision() const { return _precision; }
    int precision(int newp) {
	unsigned short oldp = _precision; _precision = (unsigned short)newp;
	return oldp; }
    fmtflags setf(fmtflags val) {
	fmtflags oldbits = _flags;
	_flags |= val; return oldbits; }
    fmtflags setf(fmtflags val, fmtflags mask) {
	fmtflags oldbits = _flags;
	_flags = (_flags & ~mask) | (val & mask); return oldbits; }
    fmtflags unsetf(fmtflags mask) {
	fmtflags oldbits = _flags;
	_flags &= ~mask; return oldbits; }
    int width() const { return _width; }
    int width(int val) { int save = _width; _width = val; return save; }




    void _throw_failure() const { }

    void clear(iostate state = 0) {
	_state = _strbuf ? state : state|badbit;
	if (_state & _exceptions) _throw_failure(); }
    void set(iostate flag) { _state |= flag;
	if (_state & _exceptions) _throw_failure(); }
    void setstate(iostate flag) { _state |= flag;  
	if (_state & _exceptions) _throw_failure(); }
    int good() const { return _state == 0; }
    int eof() const { return _state & ios::eofbit; }
    int fail() const { return _state & (ios::badbit|ios::failbit); }
    int bad() const { return _state & ios::badbit; }
    iostate rdstate() const { return _state; }
    operator void*() const { return fail() ? (void*)0 : (void*)(-1); }
    int operator!() const { return fail(); }
    iostate exceptions() const { return _exceptions; }
    void exceptions(iostate enable) {
	_exceptions = enable;
	if (_state & _exceptions) _throw_failure(); }

    streambuf* rdbuf() const { return _strbuf; }
    streambuf* rdbuf(streambuf *_s) {
      streambuf *_old = _strbuf; _strbuf = _s; clear (); return _old; }

    static int sync_with_stdio(int on);
    static void sync_with_stdio() { sync_with_stdio(1); }
    static fmtflags bitalloc();
    static int xalloc();
    void*& pword(int);
    void* pword(int) const;
    long& iword(int);
    long iword(int) const;









     
    class Init {
    public:
      Init () { }
    };

  protected:
    inline ios(streambuf* sb = 0, ostream* tie_to = 0);
    inline virtual ~ios();
    inline void init(streambuf* sb, ostream* tie = 0);
};




typedef ios::seek_dir _seek_dir;


 
 
 
 
 

 
 
class streammarker : private _IO_marker {
    friend class streambuf;
    void set_offset(int offset) { _pos = offset; }
  public:
    streammarker(streambuf *sb);
    ~streammarker();
    int saving() { return  1; }
    int delta(streammarker&);
    int delta();
};

struct streambuf : public _IO_FILE {  
    friend class ios;
    friend class istream;
    friend class ostream;
    friend class streammarker;
    const void *&_vtable() { return *(const void**)((_IO_FILE*)this + 1); }
  protected:
    static streambuf* _list_all;  
    _IO_FILE*& xchain() { return _chain; }
    void _un_link();
    void _link_in();
    char* gptr() const
      { return _flags  & 0x100  ? _IO_save_base : _IO_read_ptr; }
    char* pptr() const { return _IO_write_ptr; }
    char* egptr() const
      { return _flags  & 0x100  ? _IO_save_end : _IO_read_end; }
    char* epptr() const { return _IO_write_end; }
    char* pbase() const { return _IO_write_base; }
    char* eback() const
      { return _flags  & 0x100  ? _IO_save_base : _IO_read_base;}
    char* base() const { return _IO_buf_base; }
    char* ebuf() const { return _IO_buf_end; }
    int blen() const { return _IO_buf_end - _IO_buf_base; }
    void xput_char(char c) { *_IO_write_ptr++ = c; }
    int xflags() { return _flags ; }
    int xflags(int f) {int fl = _flags ; _flags  = f; return fl;}
    void xsetflags(int f) { _flags  |= f; }
    void xsetflags(int f, int mask)
      { _flags  = (_flags  & ~mask) | (f & mask); }
    void gbump(int n)
      { _flags  & 0x100  ? (_IO_save_base+=n):(_IO_read_ptr+=n);}
    void pbump(int n) { _IO_write_ptr += n; }
    void setb(char* b, char* eb, int a=0);
    void setp(char* p, char* ep)
      { _IO_write_base=_IO_write_ptr=p; _IO_write_end=ep; }
    void setg(char* eb, char* g, char *eg) {
      if (_flags  & 0x100 ) _IO_free_backup_area(this); 
      _IO_read_base = eb; _IO_read_ptr = g; _IO_read_end = eg; }
    char *shortbuf() { return _shortbuf; }

    int in_backup() { return _flags & 0x100 ; }
     
    char *Gbase() { return in_backup() ? _IO_save_base : _IO_read_base; }
     
    char *eGptr() { return in_backup() ? _IO_save_end : _IO_read_end; }
     
    char *Bbase() { return in_backup() ? _IO_read_base : _IO_save_base; }
    char *Bptr() { return _IO_backup_base; }
     
    char *eBptr() { return in_backup() ? _IO_read_end : _IO_save_end; }
    char *Nbase() { return _IO_save_base; }
    char *eNptr() { return _IO_save_end; }
    int have_backup() { return _IO_save_base != __null ; }
    int have_markers() { return _markers != __null ; }
    void free_backup_area();
    void unsave_markers();  
    int put_mode() { return _flags & 0x800 ; }
    int switch_to_get_mode();
    
    streambuf(int flags=0);
  public:
    static int flush_all();
    static void flush_all_linebuffered();  
    virtual ~streambuf();
    virtual int overflow(int c = (-1) );  
    virtual int underflow();  
    virtual int uflow();  
    virtual int pbackfail(int c);
 
    virtual streamsize xsputn(const char* s, streamsize n);
    virtual streamsize xsgetn(char* s, streamsize n);
    virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
    virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out);

    streampos pubseekoff(streamoff o, _seek_dir d, int mode=ios::in|ios::out)
      { return _IO_seekoff (this, o, d, mode); }
    streampos pubseekpos(streampos pos, int mode = ios::in|ios::out)
      { return _IO_seekpos (this, pos, mode); }
    streampos sseekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
    streampos sseekpos(streampos pos, int mode = ios::in|ios::out);
    virtual streambuf* setbuf(char* p, int len);
    virtual int sync();
    virtual int doallocate();

    int seekmark(streammarker& mark, int delta = 0);
    int sputbackc(char c);
    int sungetc();
    int unbuffered() { return _flags & 2  ? 1 : 0; }
    int linebuffered() { return _flags & 0x200  ? 1 : 0; }
    void unbuffered(int i)
	{ if (i) _flags |= 2 ; else _flags &= ~2 ; }
    void linebuffered(int i)
	{ if (i) _flags |= 0x200 ; else _flags &= ~0x200 ; }
    int allocate() {  
	if (base() || unbuffered()) return 0;
	else return doallocate(); }
     
    void allocbuf() { if (base() == __null ) doallocbuf(); }
    void doallocbuf();
    int in_avail() { return _IO_read_end - _IO_read_ptr; }
    int out_waiting() { return _IO_write_ptr - _IO_write_base; }
    streamsize sputn(const char* s, streamsize n) { return xsputn(s, n); }
    streamsize padn(char pad, streamsize n) { return _IO_padn(this, pad, n); }
    streamsize sgetn(char* s, streamsize n) { return _IO_sgetn(this, s, n); }
    int ignore(int);
    int get_column();
    int set_column(int);
    long sgetline(char* buf, size_t   n, char delim, int putback_delim);
    int sputc(int c) { return _IO_putc(c, this); }
    int sbumpc() { return _IO_getc(this); }
    int sgetc() { return ((  this  )->_IO_read_ptr >= (  this  )->_IO_read_end && __underflow (  this  ) == (-1)  ? (-1)  : *(unsigned char *) (  this  )->_IO_read_ptr)  ; }
    int snextc() {
	if (_IO_read_ptr >= _IO_read_end && __underflow(this) == (-1) )
	  return (-1) ;
	else return _IO_read_ptr++, sgetc(); }
    void stossc() { if (_IO_read_ptr < _IO_read_end) _IO_read_ptr++; }
    int vscan(char const *fmt0, __gnuc_va_list  ap, ios* stream = __null );
    int scan(char const *fmt0 ...);
    int vform(char const *fmt0, __gnuc_va_list  ap);
    int form(char const *fmt0 ...);




    virtual streamsize sys_read(char* buf, streamsize size);
    virtual streamsize sys_write(const char*, streamsize);
    virtual streampos sys_seek(streamoff, _seek_dir);
    virtual int sys_close();
    virtual int sys_stat(void*);  

    virtual int showmanyc();
    virtual void imbue(void *);

};

 
 

class filebuf : public streambuf {
  protected:
    void init();
  public:
    static const int openprot;  
    filebuf();
    filebuf(int fd);
    filebuf(int fd, char* p, int len);



    ~filebuf();
    filebuf* attach(int fd);
    filebuf* open(const char *filename, const char *mode);
    filebuf* open(const char *filename, ios::openmode mode, int prot = 0664);
    virtual int underflow();
    virtual int overflow(int c = (-1) );
    int is_open() const { return _fileno >= 0; }
    int fd() const { return is_open() ? _fileno : (-1) ; }
    filebuf* close();
    virtual int doallocate();
    virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
    virtual streambuf* setbuf(char* p, int len);
    streamsize xsputn(const char* s, streamsize n);
    streamsize xsgetn(char* s, streamsize n);
    virtual int sync();
  protected:  
 
    int is_reading() { return eback() != egptr(); }
    char* cur_ptr() { return is_reading() ?  gptr() : pptr(); }
     
    char* file_ptr() { return eGptr(); }
     
    virtual streamsize sys_read(char* buf, streamsize size);
    virtual streampos sys_seek(streamoff, _seek_dir);
    virtual streamsize sys_write(const char*, streamsize);
    virtual int sys_stat(void*);  
    virtual int sys_close();




};

inline void ios::init(streambuf* sb, ostream* tie_to) {
		_state = sb ? ios::goodbit : ios::badbit; _exceptions=0;
		_strbuf=sb; _tie = tie_to; _width=0; _fill=' ';

		_flags=ios::skipws|ios::dec;



		_precision=6; _arrays = 0; }

inline ios::ios(streambuf* sb, ostream* tie_to) { init(sb, tie_to); }

inline ios::~ios() {



     
     
    operator delete[] (_arrays);
}
}  

# 31 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/iostream.h" 2 3


extern "C++" {
class istream; class ostream;
typedef ios& (*__manip)(ios&);
typedef istream& (*__imanip)(istream&);
typedef ostream& (*__omanip)(ostream&);

extern istream& ws(istream& ins);
extern ostream& flush(ostream& outs);
extern ostream& endl(ostream& outs);
extern ostream& ends(ostream& outs);

class ostream : virtual public ios
{
     
    void do_osfx();
  public:
    ostream() { }
    ostream(streambuf* sb, ostream* tied= __null );
    int opfx() {
	if (!good()) return 0;
	else { if (_tie) _tie->flush();  ; return 1;} }
    void osfx() {  ;
		  if (flags() & (ios::unitbuf|ios::stdio))
		      do_osfx(); }
    ostream& flush();
    ostream& put(char c) { _strbuf->sputc(c); return *this; }





    ostream& write(const char *s, streamsize n);
    ostream& write(const unsigned char *s, streamsize n)
      { return write((const char*)s, n);}
    ostream& write(const signed char *s, streamsize n)
      { return write((const char*)s, n);}
    ostream& write(const void *s, streamsize n)
      { return write((const char*)s, n);}
    ostream& seekp(streampos);
    ostream& seekp(streamoff, _seek_dir);
    streampos tellp();
    ostream& form(const char *format ...);
    ostream& vform(const char *format, __gnuc_va_list  args);

    ostream& operator<<(char c);
    ostream& operator<<(unsigned char c) { return (*this) << (char)c; }
    ostream& operator<<(signed char c) { return (*this) << (char)c; }
    ostream& operator<<(const char *s);
    ostream& operator<<(const unsigned char *s)
	{ return (*this) << (const char*)s; }
    ostream& operator<<(const signed char *s)
	{ return (*this) << (const char*)s; }
    ostream& operator<<(const void *p);
    ostream& operator<<(int n);
    ostream& operator<<(unsigned int n);
    ostream& operator<<(long n);
    ostream& operator<<(unsigned long n);

    __extension__ ostream& operator<<(long long n);
    __extension__ ostream& operator<<(unsigned long long n);

    ostream& operator<<(short n) {return operator<<((int)n);}
    ostream& operator<<(unsigned short n) {return operator<<((unsigned int)n);}

    ostream& operator<<(bool b) { return operator<<((int)b); }

    ostream& operator<<(double n);
    ostream& operator<<(float n) { return operator<<((double)n); }

    ostream& operator<<(long double n);



    ostream& operator<<(__omanip func) { return (*func)(*this); }
    ostream& operator<<(__manip func) {(*func)(*this); return *this;}
    ostream& operator<<(streambuf*);



};

class istream : virtual public ios
{
     
protected:
    size_t   _gcount;

    int _skip_ws();
  public:
    istream(): _gcount (0) { }
    istream(streambuf* sb, ostream*tied= __null );
    istream& get(char* ptr, int len, char delim = '\n');
    istream& get(unsigned char* ptr, int len, char delim = '\n')
	{ return get((char*)ptr, len, delim); }
    istream& get(char& c);
    istream& get(unsigned char& c) { return get((char&)c); }
    istream& getline(char* ptr, int len, char delim = '\n');
    istream& getline(unsigned char* ptr, int len, char delim = '\n')
	{ return getline((char*)ptr, len, delim); }
    istream& get(signed char& c)  { return get((char&)c); }
    istream& get(signed char* ptr, int len, char delim = '\n')
	{ return get((char*)ptr, len, delim); }
    istream& getline(signed char* ptr, int len, char delim = '\n')
	{ return getline((char*)ptr, len, delim); }
    istream& read(char *ptr, streamsize n);
    istream& read(unsigned char *ptr, streamsize n)
      { return read((char*)ptr, n); }
    istream& read(signed char *ptr, streamsize n)
      { return read((char*)ptr, n); }
    istream& read(void *ptr, streamsize n)
      { return read((char*)ptr, n); }
    istream& get(streambuf& sb, char delim = '\n');
    istream& gets(char **s, char delim = '\n');
    int ipfx(int need = 0) {
	if (!good()) { set(ios::failbit); return 0; }
	else {
	   ;
	  if (_tie && (need == 0 || rdbuf()->in_avail() < need)) _tie->flush();
	  if (!need && (flags() & ios::skipws)) return _skip_ws();
	  else return 1;
	}
    }
    int ipfx0() {  
	if (!good()) { set(ios::failbit); return 0; }
	else {
	   ;
	  if (_tie) _tie->flush();
	  if (flags() & ios::skipws) return _skip_ws();
	  else return 1;
	}
    }
    int ipfx1() {  
	if (!good()) { set(ios::failbit); return 0; }
	else {
	   ;
	  if (_tie && rdbuf()->in_avail() == 0) _tie->flush();
	  return 1;
	}
    }
    void isfx() {  ; }
    int get() { if (!ipfx1()) return (-1) ;
		else { int ch = _strbuf->sbumpc();
		       if (ch == (-1) ) set(ios::eofbit);
		       isfx();
		       return ch;
		     } }
    int peek();
    size_t   gcount() { return _gcount; }
    istream& ignore(int n=1, int delim = (-1) );
    int sync ();
    istream& seekg(streampos);
    istream& seekg(streamoff, _seek_dir);
    streampos tellg();
    istream& putback(char ch) {
	if (good() && _strbuf->sputbackc(ch) == (-1) ) clear(ios::badbit);
	return *this;}
    istream& unget() {
	if (good() && _strbuf->sungetc() == (-1) ) clear(ios::badbit);
	return *this;}
    istream& scan(const char *format ...);
    istream& vscan(const char *format, __gnuc_va_list  args);






    istream& operator>>(char*);
    istream& operator>>(unsigned char* p) { return operator>>((char*)p); }
    istream& operator>>(signed char*p) { return operator>>((char*)p); }
    istream& operator>>(char& c);
    istream& operator>>(unsigned char& c) {return operator>>((char&)c);}
    istream& operator>>(signed char& c) {return operator>>((char&)c);}
    istream& operator>>(int&);
    istream& operator>>(long&);

    __extension__ istream& operator>>(long long&);
    __extension__ istream& operator>>(unsigned long long&);

    istream& operator>>(short&);
    istream& operator>>(unsigned int&);
    istream& operator>>(unsigned long&);
    istream& operator>>(unsigned short&);

    istream& operator>>(bool&);

    istream& operator>>(float&);
    istream& operator>>(double&);
    istream& operator>>(long double&);
    istream& operator>>( __manip func) {(*func)(*this); return *this;}
    istream& operator>>(__imanip func) { return (*func)(*this); }
    istream& operator>>(streambuf*);
};

class iostream : public istream, public ostream
{
  public:
    iostream() { }
    iostream(streambuf* sb, ostream*tied= __null );
};

class _IO_istream_withassign : public istream {
public:
  _IO_istream_withassign& operator=(istream&);
  _IO_istream_withassign& operator=(_IO_istream_withassign& rhs)
    { return operator= (static_cast<istream&> (rhs)); }
};

class _IO_ostream_withassign : public ostream {
public:
  _IO_ostream_withassign& operator=(ostream&);
  _IO_ostream_withassign& operator=(_IO_ostream_withassign& rhs)
    { return operator= (static_cast<ostream&> (rhs)); }
};

extern _IO_istream_withassign cin;
 
extern _IO_ostream_withassign cout, cerr;

extern _IO_ostream_withassign clog



;

extern istream& lock(istream& ins);
extern istream& unlock(istream& ins);
extern ostream& lock(ostream& outs);
extern ostream& unlock(ostream& outs);

struct Iostream_init { } ;   

inline ios& dec(ios& i)
{ i.setf(ios::dec, ios::dec|ios::hex|ios::oct); return i; }
inline ios& hex(ios& i)
{ i.setf(ios::hex, ios::dec|ios::hex|ios::oct); return i; }
inline ios& oct(ios& i)
{ i.setf(ios::oct, ios::dec|ios::hex|ios::oct); return i; }
}  


# 36 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/iterator" 2 3


# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_iterator.h" 1 3
 

























 






 

struct input_iterator_tag {};
struct output_iterator_tag {};
struct forward_iterator_tag : public input_iterator_tag {};
struct bidirectional_iterator_tag : public forward_iterator_tag {};
struct random_access_iterator_tag : public bidirectional_iterator_tag {};

 
 
 
 

template <class _Tp, class _Distance> struct input_iterator {
  typedef input_iterator_tag iterator_category;
  typedef _Tp                value_type;
  typedef _Distance          difference_type;
  typedef _Tp*               pointer;
  typedef _Tp&               reference;
};

struct output_iterator {
  typedef output_iterator_tag iterator_category;
  typedef void                value_type;
  typedef void                difference_type;
  typedef void                pointer;
  typedef void                reference;
};

template <class _Tp, class _Distance> struct forward_iterator {
  typedef forward_iterator_tag iterator_category;
  typedef _Tp                  value_type;
  typedef _Distance            difference_type;
  typedef _Tp*                 pointer;
  typedef _Tp&                 reference;
};


template <class _Tp, class _Distance> struct bidirectional_iterator {
  typedef bidirectional_iterator_tag iterator_category;
  typedef _Tp                        value_type;
  typedef _Distance                  difference_type;
  typedef _Tp*                       pointer;
  typedef _Tp&                       reference;
};

template <class _Tp, class _Distance> struct random_access_iterator {
  typedef random_access_iterator_tag iterator_category;
  typedef _Tp                        value_type;
  typedef _Distance                  difference_type;
  typedef _Tp*                       pointer;
  typedef _Tp&                       reference;
};

# 98 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_iterator.h" 3




template <class _Iterator>
struct iterator_traits {
  typedef typename _Iterator::iterator_category iterator_category;
  typedef typename _Iterator::value_type        value_type;
  typedef typename _Iterator::difference_type   difference_type;
  typedef typename _Iterator::pointer           pointer;
  typedef typename _Iterator::reference         reference;
};

template <class _Tp>
struct iterator_traits<_Tp*> {
  typedef random_access_iterator_tag iterator_category;
  typedef _Tp                         value_type;
  typedef ptrdiff_t                   difference_type;
  typedef _Tp*                        pointer;
  typedef _Tp&                        reference;
};

template <class _Tp>
struct iterator_traits<const _Tp*> {
  typedef random_access_iterator_tag iterator_category;
  typedef _Tp                         value_type;
  typedef ptrdiff_t                   difference_type;
  typedef const _Tp*                  pointer;
  typedef const _Tp&                  reference;
};

 
 
 
 

 

template <class _Iter>
inline typename iterator_traits<_Iter>::iterator_category
__iterator_category(const _Iter&)
{
  typedef typename iterator_traits<_Iter>::iterator_category _Category;
  return _Category();
}

template <class _Iter>
inline typename iterator_traits<_Iter>::difference_type*
__distance_type(const _Iter&)
{
  return static_cast<typename iterator_traits<_Iter>::difference_type*>(0);
}

template <class _Iter>
inline typename iterator_traits<_Iter>::value_type*
__value_type(const _Iter&)
{
  return static_cast<typename iterator_traits<_Iter>::value_type*>(0);
}

template <class _Iter>
inline typename iterator_traits<_Iter>::iterator_category
iterator_category(const _Iter& __i) { return __iterator_category(__i); }


template <class _Iter>
inline typename iterator_traits<_Iter>::difference_type*
distance_type(const _Iter& __i) { return __distance_type(__i); }

template <class _Iter>
inline typename iterator_traits<_Iter>::value_type*
value_type(const _Iter& __i) { return __value_type(__i); }





# 259 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_iterator.h" 3


template <class _InputIterator, class _Distance>
inline void __distance(_InputIterator __first, _InputIterator __last,
                       _Distance& __n, input_iterator_tag)
{
  while (__first != __last) { ++__first; ++__n; }
}

template <class _RandomAccessIterator, class _Distance>
inline void __distance(_RandomAccessIterator __first, 
                       _RandomAccessIterator __last, 
                       _Distance& __n, random_access_iterator_tag)
{
  __n += __last - __first;
}

template <class _InputIterator, class _Distance>
inline void distance(_InputIterator __first, 
                     _InputIterator __last, _Distance& __n)
{
  __distance(__first, __last, __n, iterator_category(__first));
}



template <class _InputIterator>
inline typename iterator_traits<_InputIterator>::difference_type
__distance(_InputIterator __first, _InputIterator __last, input_iterator_tag)
{
  typename iterator_traits<_InputIterator>::difference_type __n = 0;
  while (__first != __last) {
    ++__first; ++__n;
  }
  return __n;
}

template <class _RandomAccessIterator>
inline typename iterator_traits<_RandomAccessIterator>::difference_type
__distance(_RandomAccessIterator __first, _RandomAccessIterator __last,
           random_access_iterator_tag) {
  return __last - __first;
}

template <class _InputIterator>
inline typename iterator_traits<_InputIterator>::difference_type
distance(_InputIterator __first, _InputIterator __last) {
  typedef typename iterator_traits<_InputIterator>::iterator_category 
    _Category;
  return __distance(__first, __last, _Category());
}



template <class _InputIter, class _Distance>
inline void __advance(_InputIter& __i, _Distance __n, input_iterator_tag) {
  while (__n--) ++__i;
}





template <class _BidirectionalIterator, class _Distance>
inline void __advance(_BidirectionalIterator& __i, _Distance __n, 
                      bidirectional_iterator_tag) {
  if (__n >= 0)
    while (__n--) ++__i;
  else
    while (__n++) --__i;
}





template <class _RandomAccessIterator, class _Distance>
inline void __advance(_RandomAccessIterator& __i, _Distance __n, 
                      random_access_iterator_tag) {
  __i += __n;
}

template <class _InputIterator, class _Distance>
inline void advance(_InputIterator& __i, _Distance __n) {
  __advance(__i, __n, iterator_category(__i));
}

template <class _Container>
class back_insert_iterator {
protected:
  _Container* container;
public:
  typedef _Container          container_type;
  typedef output_iterator_tag iterator_category;
  typedef void                value_type;
  typedef void                difference_type;
  typedef void                pointer;
  typedef void                reference;

  explicit back_insert_iterator(_Container& __x) : container(&__x) {}
  back_insert_iterator<_Container>&
  operator=(const typename _Container::value_type& __value) { 
    container->push_back(__value);
    return *this;
  }
  back_insert_iterator<_Container>& operator*() { return *this; }
  back_insert_iterator<_Container>& operator++() { return *this; }
  back_insert_iterator<_Container>& operator++(int) { return *this; }
};

# 378 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_iterator.h" 3


template <class _Container>
inline back_insert_iterator<_Container> back_inserter(_Container& __x) {
  return back_insert_iterator<_Container>(__x);
}

template <class _Container>
class front_insert_iterator {
protected:
  _Container* container;
public:
  typedef _Container          container_type;
  typedef output_iterator_tag iterator_category;
  typedef void                value_type;
  typedef void                difference_type;
  typedef void                pointer;
  typedef void                reference;

  explicit front_insert_iterator(_Container& __x) : container(&__x) {}
  front_insert_iterator<_Container>&
  operator=(const typename _Container::value_type& __value) { 
    container->push_front(__value);
    return *this;
  }
  front_insert_iterator<_Container>& operator*() { return *this; }
  front_insert_iterator<_Container>& operator++() { return *this; }
  front_insert_iterator<_Container>& operator++(int) { return *this; }
};

# 417 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_iterator.h" 3


template <class _Container>
inline front_insert_iterator<_Container> front_inserter(_Container& __x) {
  return front_insert_iterator<_Container>(__x);
}

template <class _Container>
class insert_iterator {
protected:
  _Container* container;
  typename _Container::iterator iter;
public:
  typedef _Container          container_type;
  typedef output_iterator_tag iterator_category;
  typedef void                value_type;
  typedef void                difference_type;
  typedef void                pointer;
  typedef void                reference;

  insert_iterator(_Container& __x, typename _Container::iterator __i) 
    : container(&__x), iter(__i) {}
  insert_iterator<_Container>&
  operator=(const typename _Container::value_type& __value) { 
    iter = container->insert(iter, __value);
    ++iter;
    return *this;
  }
  insert_iterator<_Container>& operator*() { return *this; }
  insert_iterator<_Container>& operator++() { return *this; }
  insert_iterator<_Container>& operator++(int) { return *this; }
};

# 459 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_iterator.h" 3


template <class _Container, class _Iterator>
inline 
insert_iterator<_Container> inserter(_Container& __x, _Iterator __i)
{
  typedef typename _Container::iterator __iter;
  return insert_iterator<_Container>(__x, __iter(__i));
}


template <class _BidirectionalIterator, class _Tp, class _Reference = _Tp&, 
          class _Distance = ptrdiff_t> 




class reverse_bidirectional_iterator {
  typedef reverse_bidirectional_iterator<_BidirectionalIterator, _Tp, 
                                         _Reference, _Distance>  _Self;
protected:
  _BidirectionalIterator current;
public:
  typedef bidirectional_iterator_tag iterator_category;
  typedef _Tp                        value_type;
  typedef _Distance                  difference_type;
  typedef _Tp*                       pointer;
  typedef _Reference                 reference;

  reverse_bidirectional_iterator() {}
  explicit reverse_bidirectional_iterator(_BidirectionalIterator __x)
    : current(__x) {}
  _BidirectionalIterator base() const { return current; }
  _Reference operator*() const {
    _BidirectionalIterator __tmp = current;
    return *--__tmp;
  }

  pointer operator->() const { return &(operator*()); }

  _Self& operator++() {
    --current;
    return *this;
  }
  _Self operator++(int) {
    _Self __tmp = *this;
    --current;
    return __tmp;
  }
  _Self& operator--() {
    ++current;
    return *this;
  }
  _Self operator--(int) {
    _Self __tmp = *this;
    ++current;
    return __tmp;
  }
};

# 550 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_iterator.h" 3


template <class _BiIter, class _Tp, class _Ref,
          class _Distance>
inline bool operator==(
    const reverse_bidirectional_iterator<_BiIter, _Tp, _Ref, _Distance>& __x, 
    const reverse_bidirectional_iterator<_BiIter, _Tp, _Ref, _Distance>& __y)
{
  return __x.base() == __y.base();
}



 
 
 
 
 

template <class _Iterator>
class reverse_iterator 
{
protected:
  _Iterator current;
public:
  typedef typename iterator_traits<_Iterator>::iterator_category
          iterator_category;
  typedef typename iterator_traits<_Iterator>::value_type
          value_type;
  typedef typename iterator_traits<_Iterator>::difference_type
          difference_type;
  typedef typename iterator_traits<_Iterator>::pointer
          pointer;
  typedef typename iterator_traits<_Iterator>::reference
          reference;

  typedef _Iterator iterator_type;
  typedef reverse_iterator<_Iterator> _Self;

public:
  reverse_iterator() {}
  explicit reverse_iterator(iterator_type __x) : current(__x) {}

  reverse_iterator(const _Self& __x) : current(__x.current) {}

  template <class _Iter>
  reverse_iterator(const reverse_iterator<_Iter>& __x)
    : current(__x.base()) {}

    
  iterator_type base() const { return current; }
  reference operator*() const {
    _Iterator __tmp = current;
    return *--__tmp;
  }

  pointer operator->() const { return &(operator*()); }


  _Self& operator++() {
    --current;
    return *this;
  }
  _Self operator++(int) {
    _Self __tmp = *this;
    --current;
    return __tmp;
  }
  _Self& operator--() {
    ++current;
    return *this;
  }
  _Self operator--(int) {
    _Self __tmp = *this;
    ++current;
    return __tmp;
  }

  _Self operator+(difference_type __n) const {
    return _Self(current - __n);
  }
  _Self& operator+=(difference_type __n) {
    current -= __n;
    return *this;
  }
  _Self operator-(difference_type __n) const {
    return _Self(current + __n);
  }
  _Self& operator-=(difference_type __n) {
    current += __n;
    return *this;
  }
  reference operator[](difference_type __n) const { return *(*this + __n); }  
}; 
 
template <class _Iterator>
inline bool operator==(const reverse_iterator<_Iterator>& __x, 
                       const reverse_iterator<_Iterator>& __y) {
  return __x.base() == __y.base();
}

template <class _Iterator>
inline bool operator<(const reverse_iterator<_Iterator>& __x, 
                      const reverse_iterator<_Iterator>& __y) {
  return __y.base() < __x.base();
}

template <class _Iterator>
inline typename reverse_iterator<_Iterator>::difference_type
operator-(const reverse_iterator<_Iterator>& __x, 
          const reverse_iterator<_Iterator>& __y) {
  return __y.base() - __x.base();
}

template <class _Iterator>
inline reverse_iterator<_Iterator> 
operator+(typename reverse_iterator<_Iterator>::difference_type __n,
          const reverse_iterator<_Iterator>& __x) {
  return reverse_iterator<_Iterator>(__x.base() - __n);
}

# 805 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_iterator.h" 3


 
 

template <class _Tp, class _Dist = ptrdiff_t> 
class istream_iterator {
  friend bool operator== <>  (const istream_iterator&,
                                               const istream_iterator&);
protected:
  istream* _M_stream;
  _Tp _M_value;
  bool _M_end_marker;
  void _M_read() {
    _M_end_marker = (*_M_stream) ? true : false;
    if (_M_end_marker) *_M_stream >> _M_value;
    _M_end_marker = (*_M_stream) ? true : false;
  }
public:
  typedef input_iterator_tag  iterator_category;
  typedef _Tp                 value_type;
  typedef _Dist               difference_type;
  typedef const _Tp*          pointer;
  typedef const _Tp&          reference;

  istream_iterator() : _M_stream(&cin), _M_end_marker(false) {}
  istream_iterator(istream& __s) : _M_stream(&__s) { _M_read(); }
  reference operator*() const { return _M_value; }

  pointer operator->() const { return &(operator*()); }

  istream_iterator<_Tp, _Dist>& operator++() { 
    _M_read(); 
    return *this;
  }
  istream_iterator<_Tp, _Dist> operator++(int)  {
    istream_iterator<_Tp, _Dist> __tmp = *this;
    _M_read();
    return __tmp;
  }
};

# 864 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_iterator.h" 3


template <class _Tp, class _Distance>
inline bool operator==(const istream_iterator<_Tp, _Distance>& __x,
                       const istream_iterator<_Tp, _Distance>& __y) {
  return (__x._M_stream == __y._M_stream &&
          __x._M_end_marker == __y._M_end_marker) ||
         __x._M_end_marker == false && __y._M_end_marker == false;
}

template <class _Tp>
class ostream_iterator {
protected:
  ostream* _M_stream;
  const char* _M_string;
public:
  typedef output_iterator_tag iterator_category;
  typedef void                value_type;
  typedef void                difference_type;
  typedef void                pointer;
  typedef void                reference;

  ostream_iterator(ostream& __s) : _M_stream(&__s), _M_string(0) {}
  ostream_iterator(ostream& __s, const char* __c) 
    : _M_stream(&__s), _M_string(__c)  {}
  ostream_iterator<_Tp>& operator=(const _Tp& __value) { 
    *_M_stream << __value;
    if (_M_string) *_M_stream << _M_string;
    return *this;
  }
  ostream_iterator<_Tp>& operator*() { return *this; }
  ostream_iterator<_Tp>& operator++() { return *this; } 
  ostream_iterator<_Tp>& operator++(int) { return *this; } 
};

# 907 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_iterator.h" 3


 



 
 
 
# 38 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/iterator" 2 3




 
 
 
# 44 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/std/bastring.h" 2 3




extern void __out_of_range (const char *);
extern void __length_error (const char *);














template <class charT, class traits = string_char_traits<charT>,
	  class Allocator = alloc >
class basic_string
{
private:
  struct Rep {
    size_t len, res, ref;
    bool selfish;

    charT* data () { return reinterpret_cast<charT *>(this + 1); }
    charT& operator[] (size_t s) { return data () [s]; }
    charT* grab () { if (selfish) return clone (); ++ref; return data (); }
# 108 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/std/bastring.h" 3

    void release () { if (--ref == 0) delete this; }


    inline static void * operator new (size_t, size_t);
    inline static void operator delete (void *);
    inline static Rep* create (size_t);
    charT* clone ();

    inline void copy (size_t, const charT *, size_t);
    inline void move (size_t, const charT *, size_t);
    inline void set  (size_t, const charT,   size_t);

    inline static bool excess_slop (size_t, size_t);
    inline static size_t frob_size (size_t);

  private:
    Rep &operator= (const Rep &);
  };

public:
 
  typedef	   traits		traits_type;
  typedef typename traits::char_type	value_type;
  typedef	   Allocator		allocator_type;

  typedef size_t size_type;
  typedef ptrdiff_t difference_type;
  typedef charT& reference;
  typedef const charT& const_reference;
  typedef charT* pointer;
  typedef const charT* const_pointer;
  typedef pointer iterator;
  typedef const_pointer const_iterator;
  typedef ::reverse_iterator<iterator> reverse_iterator;
  typedef ::reverse_iterator<const_iterator> const_reverse_iterator;
  static const size_type npos = static_cast<size_type>(-1);

private:
  Rep *rep () const { return reinterpret_cast<Rep *>(dat) - 1; }
  void repup (Rep *p) { rep ()->release (); dat = p->data (); }

public:
  const charT* data () const
    { return rep ()->data(); }
  size_type length () const
    { return rep ()->len; }
  size_type size () const
    { return rep ()->len; }
  size_type capacity () const
    { return rep ()->res; }
  size_type max_size () const
    { return (npos - 1)/sizeof (charT); }		 
  bool empty () const
    { return size () == 0; }

 
  basic_string& operator= (const basic_string& str)
    {
      if (&str != this) { rep ()->release (); dat = str.rep ()->grab (); }
      return *this;
    }

  explicit basic_string (): dat (nilRep.grab ()) { }
  basic_string (const basic_string& _str): dat (_str.rep ()->grab ()) { }
  basic_string (const basic_string& _str, size_type pos, size_type n = npos)
    : dat (nilRep.grab ()) { assign (_str, pos, n); }
  basic_string (const charT* s, size_type n)
    : dat (nilRep.grab ()) { assign (s, n); }
  basic_string (const charT* s)
    : dat (nilRep.grab ()) { assign (s); }
  basic_string (size_type n, charT c)
    : dat (nilRep.grab ()) { assign (n, c); }

  template<class InputIterator>
    basic_string(InputIterator __begin, InputIterator __end)



    : dat (nilRep.grab ()) { assign (__begin, __end); }

  ~basic_string ()
    { rep ()->release (); }

  void swap (basic_string &s) { charT *d = dat; dat = s.dat; s.dat = d; }

  basic_string& append (const basic_string& _str, size_type pos = 0,
			size_type n = npos)
    { return replace (length (), 0, _str, pos, n); }
  basic_string& append (const charT* s, size_type n)
    { return replace (length (), 0, s, n); }
  basic_string& append (const charT* s)
    { return append (s, traits::length (s)); }
  basic_string& append (size_type n, charT c)
    { return replace (length (), 0, n, c); }

  template<class InputIterator>
    basic_string& append(InputIterator first, InputIterator last)



    { return replace (iend (), iend (), first, last); }

  void push_back(charT __c)
  { append(1, __c); }
  
  basic_string& assign (const basic_string& str, size_type pos = 0,
			size_type n = npos)
    { return replace (0, npos, str, pos, n); }
  basic_string& assign (const charT* s, size_type n)
    { return replace (0, npos, s, n); }
  basic_string& assign (const charT* s)
    { return assign (s, traits::length (s)); }
  basic_string& assign (size_type n, charT c)
    { return replace (0, npos, n, c); }

  template<class InputIterator>
    basic_string& assign(InputIterator first, InputIterator last)



    { return replace (ibegin (), iend (), first, last); }

  basic_string& operator= (const charT* s)
    { return assign (s); }
  basic_string& operator= (charT c)
    { return assign (1, c); }

  basic_string& operator+= (const basic_string& rhs)
    { return append (rhs); }
  basic_string& operator+= (const charT* s)
    { return append (s); }
  basic_string& operator+= (charT c)
    { return append (1, c); }

  basic_string& insert (size_type pos1, const basic_string& str,
			size_type pos2 = 0, size_type n = npos)
    { return replace (pos1, 0, str, pos2, n); }
  basic_string& insert (size_type pos, const charT* s, size_type n)
    { return replace (pos, 0, s, n); }
  basic_string& insert (size_type pos, const charT* s)
    { return insert (pos, s, traits::length (s)); }
  basic_string& insert (size_type pos, size_type n, charT c)
    { return replace (pos, 0, n, c); }
  iterator insert(iterator p, charT c)
    { size_type __o = p - ibegin ();
      insert (p - ibegin (), 1, c); selfish ();
      return ibegin () + __o; }
  iterator insert(iterator p, size_type n, charT c)
    { size_type __o = p - ibegin ();
      insert (p - ibegin (), n, c); selfish ();
      return ibegin () + __o; }

  template<class InputIterator>
    void insert(iterator p, InputIterator first, InputIterator last)



    { replace (p, p, first, last); }

  basic_string& erase (size_type pos = 0, size_type n = npos)
    { return replace (pos, n, (size_type)0, (charT)0); }
  iterator erase(iterator p)
    { size_type __o = p - begin();
      replace (__o, 1, (size_type)0, (charT)0); selfish ();
      return ibegin() + __o; }
  iterator erase(iterator f, iterator l)
    { size_type __o = f - ibegin();
      replace (__o, l-f, (size_type)0, (charT)0);selfish ();
      return ibegin() + __o; }

  basic_string& replace (size_type pos1, size_type n1, const basic_string& str,
			 size_type pos2 = 0, size_type n2 = npos);
  basic_string& replace (size_type pos, size_type n1, const charT* s,
			 size_type n2);
  basic_string& replace (size_type pos, size_type n1, const charT* s)
    { return replace (pos, n1, s, traits::length (s)); }
  basic_string& replace (size_type pos, size_type n1, size_type n2, charT c);
  basic_string& replace (size_type pos, size_type n, charT c)
    { return replace (pos, n, 1, c); }
  basic_string& replace (iterator i1, iterator i2, const basic_string& str)
    { return replace (i1 - ibegin (), i2 - i1, str); }
  basic_string& replace (iterator i1, iterator i2, const charT* s, size_type n)
    { return replace (i1 - ibegin (), i2 - i1, s, n); }
  basic_string& replace (iterator i1, iterator i2, const charT* s)
    { return replace (i1 - ibegin (), i2 - i1, s); }
  basic_string& replace (iterator i1, iterator i2, size_type n, charT c)
    { return replace (i1 - ibegin (), i2 - i1, n, c); }

  template<class InputIterator>
    basic_string& replace(iterator i1, iterator i2,
			  InputIterator j1, InputIterator j2);





private:
  static charT eos () { return traits::eos (); }
  void unique () { if (rep ()->ref > 1) alloc (length (), true); }
  void selfish () { unique (); rep ()->selfish = true; }

public:
  charT operator[] (size_type pos) const
    {
      if (pos == length ())
	return eos ();
      return data ()[pos];
    }

  reference operator[] (size_type pos)
    { selfish (); return (*rep ())[pos]; }

  reference at (size_type pos)
    {
      do { if ( pos >= length () ) __out_of_range ("pos >= length ()"); } while (0) ;
      return (*this)[pos];
    }
  const_reference at (size_type pos) const
    {
      do { if ( pos >= length () ) __out_of_range ("pos >= length ()"); } while (0) ;
      return data ()[pos];
    }

private:
  void terminate () const
    { traits::assign ((*rep ())[length ()], eos ()); }

public:
  const charT* c_str () const
    { const charT* null_str = ""; 
      if (length () == 0) return null_str; terminate (); return data (); }
  void resize (size_type n, charT c);
  void resize (size_type n)
    { resize (n, eos ()); }
  void reserve (size_type) { }

  size_type copy (charT* s, size_type n, size_type pos = 0) const;

  size_type find (const basic_string& str, size_type pos = 0) const
    { return find (str.data(), pos, str.length()); }
  size_type find (const charT* s, size_type pos, size_type n) const;
  size_type find (const charT* _s, size_type pos = 0) const
    { return find (_s, pos, traits::length (_s)); }
  size_type find (charT c, size_type pos = 0) const;

  size_type rfind (const basic_string& str, size_type pos = npos) const
    { return rfind (str.data(), pos, str.length()); }
  size_type rfind (const charT* s, size_type pos, size_type n) const;
  size_type rfind (const charT* s, size_type pos = npos) const
    { return rfind (s, pos, traits::length (s)); }
  size_type rfind (charT c, size_type pos = npos) const;

  size_type find_first_of (const basic_string& str, size_type pos = 0) const
    { return find_first_of (str.data(), pos, str.length()); }
  size_type find_first_of (const charT* s, size_type pos, size_type n) const;
  size_type find_first_of (const charT* s, size_type pos = 0) const
    { return find_first_of (s, pos, traits::length (s)); }
  size_type find_first_of (charT c, size_type pos = 0) const
    { return find (c, pos); }

  size_type find_last_of (const basic_string& str, size_type pos = npos) const
    { return find_last_of (str.data(), pos, str.length()); }
  size_type find_last_of (const charT* s, size_type pos, size_type n) const;
  size_type find_last_of (const charT* s, size_type pos = npos) const
    { return find_last_of (s, pos, traits::length (s)); }
  size_type find_last_of (charT c, size_type pos = npos) const
    { return rfind (c, pos); }

  size_type find_first_not_of (const basic_string& str, size_type pos = 0) const
    { return find_first_not_of (str.data(), pos, str.length()); }
  size_type find_first_not_of (const charT* s, size_type pos, size_type n) const;
  size_type find_first_not_of (const charT* s, size_type pos = 0) const
    { return find_first_not_of (s, pos, traits::length (s)); }
  size_type find_first_not_of (charT c, size_type pos = 0) const;

  size_type find_last_not_of (const basic_string& str, size_type pos = npos) const
    { return find_last_not_of (str.data(), pos, str.length()); }
  size_type find_last_not_of (const charT* s, size_type pos, size_type n) const;
  size_type find_last_not_of (const charT* s, size_type pos = npos) const
    { return find_last_not_of (s, pos, traits::length (s)); }
  size_type find_last_not_of (charT c, size_type pos = npos) const;

  basic_string substr (size_type pos = 0, size_type n = npos) const
    { return basic_string (*this, pos, n); }

  int compare (const basic_string& str, size_type pos = 0, size_type n = npos) const;
   
  int compare (const charT* s, size_type pos, size_type n) const;
  int compare (const charT* s, size_type pos = 0) const
    { return compare (s, pos, traits::length (s)); }

  iterator begin () { selfish (); return &(*this)[0]; }
  iterator end () { selfish (); return &(*this)[length ()]; }

private:
  iterator ibegin () const { return &(*rep ())[0]; }
  iterator iend () const { return &(*rep ())[length ()]; }

public:
  const_iterator begin () const { return ibegin (); }
  const_iterator end () const { return iend (); }

  reverse_iterator       rbegin() { return reverse_iterator (end ()); }
  const_reverse_iterator rbegin() const
    { return const_reverse_iterator (end ()); }
  reverse_iterator       rend() { return reverse_iterator (begin ()); }
  const_reverse_iterator rend() const
    { return const_reverse_iterator (begin ()); }

private:
  void alloc (size_type size, bool save);
  static size_type _find (const charT* ptr, charT c, size_type xpos, size_type len);
  inline bool check_realloc (size_type s) const;

  static Rep nilRep;
  charT *dat;
};


template <class charT, class traits, class Allocator> template <class InputIterator>
basic_string <charT, traits, Allocator>& basic_string <charT, traits, Allocator>::
replace (iterator i1, iterator i2, InputIterator j1, InputIterator j2)





{
  const size_type len = length ();
  size_type pos = i1 - ibegin ();
  size_type n1 = i2 - i1;
  size_type n2 = j2 - j1;

  do { if ( pos > len ) __out_of_range ("pos > len"); } while (0) ;
  if (n1 > len - pos)
    n1 = len - pos;
  do { if ( len - n1 > max_size () - n2 ) __length_error ("len - n1 > max_size () - n2"); } while (0) ;
  size_t newlen = len - n1 + n2;

  if (check_realloc (newlen))
    {
      Rep *p = Rep::create (newlen);
      p->copy (0, data (), pos);
      p->copy (pos + n2, data () + pos + n1, len - (pos + n1));
      for (; j1 != j2; ++j1, ++pos)
	traits::assign ((*p)[pos], *j1);
      repup (p);
    }
  else
    {
      rep ()->move (pos + n2, data () + pos + n1, len - (pos + n1));
      for (; j1 != j2; ++j1, ++pos)
	traits::assign ((*rep ())[pos], *j1);
    }
  rep ()->len = newlen;

  return *this;
}

template <class charT, class traits, class Allocator>
inline basic_string <charT, traits, Allocator>
operator+ (const basic_string <charT, traits, Allocator>& lhs,
	   const basic_string <charT, traits, Allocator>& rhs)
{
  basic_string <charT, traits, Allocator> _str (lhs);
  _str.append (rhs);
  return _str;
}

template <class charT, class traits, class Allocator>
inline basic_string <charT, traits, Allocator>
operator+ (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
{
  basic_string <charT, traits, Allocator> _str (lhs);
  _str.append (rhs);
  return _str;
}

template <class charT, class traits, class Allocator>
inline basic_string <charT, traits, Allocator>
operator+ (charT lhs, const basic_string <charT, traits, Allocator>& rhs)
{
  basic_string <charT, traits, Allocator> _str (1, lhs);
  _str.append (rhs);
  return _str;
}

template <class charT, class traits, class Allocator>
inline basic_string <charT, traits, Allocator>
operator+ (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
{
  basic_string <charT, traits, Allocator> _str (lhs);
  _str.append (rhs);
  return _str;
}

template <class charT, class traits, class Allocator>
inline basic_string <charT, traits, Allocator>
operator+ (const basic_string <charT, traits, Allocator>& lhs, charT rhs)
{
  basic_string <charT, traits, Allocator> str (lhs);
  str.append (1, rhs);
  return str;
}

template <class charT, class traits, class Allocator>
inline bool
operator== (const basic_string <charT, traits, Allocator>& lhs,
	    const basic_string <charT, traits, Allocator>& rhs)
{
  return (lhs.compare (rhs) == 0);
}

template <class charT, class traits, class Allocator>
inline bool
operator== (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
{
  return (rhs.compare (lhs) == 0);
}

template <class charT, class traits, class Allocator>
inline bool
operator== (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
{
  return (lhs.compare (rhs) == 0);
}

template <class charT, class traits, class Allocator>
inline bool
operator!= (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
{
  return (rhs.compare (lhs) != 0);
}

template <class charT, class traits, class Allocator>
inline bool
operator!= (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
{
  return (lhs.compare (rhs) != 0);
}

template <class charT, class traits, class Allocator>
inline bool
operator< (const basic_string <charT, traits, Allocator>& lhs,
	    const basic_string <charT, traits, Allocator>& rhs)
{
  return (lhs.compare (rhs) < 0);
}

template <class charT, class traits, class Allocator>
inline bool
operator< (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
{
  return (rhs.compare (lhs) > 0);
}

template <class charT, class traits, class Allocator>
inline bool
operator< (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
{
  return (lhs.compare (rhs) < 0);
}

template <class charT, class traits, class Allocator>
inline bool
operator> (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
{
  return (rhs.compare (lhs) < 0);
}

template <class charT, class traits, class Allocator>
inline bool
operator> (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
{
  return (lhs.compare (rhs) > 0);
}

template <class charT, class traits, class Allocator>
inline bool
operator<= (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
{
  return (rhs.compare (lhs) >= 0);
}

template <class charT, class traits, class Allocator>
inline bool
operator<= (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
{
  return (lhs.compare (rhs) <= 0);
}

template <class charT, class traits, class Allocator>
inline bool
operator>= (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
{
  return (rhs.compare (lhs) <= 0);
}

template <class charT, class traits, class Allocator>
inline bool
operator>= (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
{
  return (lhs.compare (rhs) >= 0);
}

template <class charT, class traits, class Allocator>
inline bool
operator!= (const basic_string <charT, traits, Allocator>& lhs,
	    const basic_string <charT, traits, Allocator>& rhs)
{
  return (lhs.compare (rhs) != 0);
}

template <class charT, class traits, class Allocator>
inline bool
operator> (const basic_string <charT, traits, Allocator>& lhs,
	   const basic_string <charT, traits, Allocator>& rhs)
{
  return (lhs.compare (rhs) > 0);
}

template <class charT, class traits, class Allocator>
inline bool
operator<= (const basic_string <charT, traits, Allocator>& lhs,
	    const basic_string <charT, traits, Allocator>& rhs)
{
  return (lhs.compare (rhs) <= 0);
}

template <class charT, class traits, class Allocator>
inline bool
operator>= (const basic_string <charT, traits, Allocator>& lhs,
	    const basic_string <charT, traits, Allocator>& rhs)
{
  return (lhs.compare (rhs) >= 0);
}

class istream; class ostream;
template <class charT, class traits, class Allocator> istream&
operator>> (istream&, basic_string <charT, traits, Allocator>&);
template <class charT, class traits, class Allocator> ostream&
operator<< (ostream&, const basic_string <charT, traits, Allocator>&);
template <class charT, class traits, class Allocator> istream&
getline (istream&, basic_string <charT, traits, Allocator>&, charT delim = '\n');

}  

# 1 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/std/bastring.cc" 1 3
 
 

 
 
 
 
 

 
 
 
 

 
 
 

 
 
 
 
 

 
 

extern "C++" {
template <class charT, class traits, class Allocator>
inline void * basic_string <charT, traits, Allocator>::Rep::
operator new (size_t s, size_t extra)
{
  return Allocator::allocate(s + extra * sizeof (charT));
}

template <class charT, class traits, class Allocator>
inline void basic_string <charT, traits, Allocator>::Rep::
operator delete (void * ptr)
{
  Allocator::deallocate(ptr, sizeof(Rep) +
			reinterpret_cast<Rep *>(ptr)->res *
			sizeof (charT));
}

template <class charT, class traits, class Allocator>
inline size_t basic_string <charT, traits, Allocator>::Rep::
frob_size (size_t s)
{
  size_t i = 16;
  while (i < s) i *= 2;
  return i;
}

template <class charT, class traits, class Allocator>
inline basic_string <charT, traits, Allocator>::Rep *
basic_string <charT, traits, Allocator>::Rep::
create (size_t extra)
{
  extra = frob_size (extra + 1);
  Rep *p = new (extra) Rep;
  p->res = extra;
  p->ref = 1;
  p->selfish = false;
  return p;
}

template <class charT, class traits, class Allocator>
charT * basic_string <charT, traits, Allocator>::Rep::
clone ()
{
  Rep *p = Rep::create (len);
  p->copy (0, data (), len);
  p->len = len;
  return p->data ();
}

template <class charT, class traits, class Allocator>
inline bool basic_string <charT, traits, Allocator>::Rep::
excess_slop (size_t s, size_t r)
{
  return 2 * (s <= 16 ? 16 : s) < r;
}

template <class charT, class traits, class Allocator>
inline bool basic_string <charT, traits, Allocator>::
check_realloc (basic_string::size_type s) const
{
  s += sizeof (charT);
  rep ()->selfish = false;
  return (rep ()->ref > 1
	  || s > capacity ()
	  || Rep::excess_slop (s, capacity ()));
}

template <class charT, class traits, class Allocator>
void basic_string <charT, traits, Allocator>::
alloc (basic_string::size_type __size, bool __save)
{
  if (! check_realloc (__size))
    return;

  Rep *p = Rep::create (__size);

  if (__save)
    {
      p->copy (0, data (), length ());
      p->len = length ();
    }
  else
    p->len = 0;

  repup (p);
}

template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>&
basic_string <charT, traits, Allocator>::
replace (size_type pos1, size_type n1,
	 const basic_string& _str, size_type pos2, size_type n2)
{
  const size_t len2 = _str.length ();

  if (pos1 == 0 && n1 >= length () && pos2 == 0 && n2 >= len2)
    return operator= (_str);

  do { if ( pos2 > len2 ) __out_of_range ("pos2 > len2"); } while (0) ;

  if (n2 > len2 - pos2)
    n2 = len2 - pos2;

  return replace (pos1, n1, _str.data () + pos2, n2);
}

template <class charT, class traits, class Allocator>
inline void basic_string <charT, traits, Allocator>::Rep::
copy (size_t pos, const charT *s, size_t n)
{
  if (n)
    traits::copy (data () + pos, s, n);
}

template <class charT, class traits, class Allocator>
inline void basic_string <charT, traits, Allocator>::Rep::
move (size_t pos, const charT *s, size_t n)
{
  if (n)
    traits::move (data () + pos, s, n);
}

template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>&
basic_string <charT, traits, Allocator>::
replace (size_type pos, size_type n1, const charT* s, size_type n2)
{
  const size_type len = length ();
  do { if ( pos > len ) __out_of_range ("pos > len"); } while (0) ;
  if (n1 > len - pos)
    n1 = len - pos;
  do { if ( len - n1 > max_size () - n2 ) __length_error ("len - n1 > max_size () - n2"); } while (0) ;
  size_t newlen = len - n1 + n2;

  if (check_realloc (newlen))
    {
      Rep *p = Rep::create (newlen);
      p->copy (0, data (), pos);
      p->copy (pos + n2, data () + pos + n1, len - (pos + n1));
      p->copy (pos, s, n2);
      repup (p);
    }
  else
    {
      rep ()->move (pos + n2, data () + pos + n1, len - (pos + n1));
      rep ()->copy (pos, s, n2);
    }
  rep ()->len = newlen;

  return *this;
}

template <class charT, class traits, class Allocator>
inline void basic_string <charT, traits, Allocator>::Rep::
set (size_t pos, const charT c, size_t n)
{
  traits::set  (data () + pos, c, n);
}

template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>& basic_string <charT, traits, Allocator>::
replace (size_type pos, size_type n1, size_type n2, charT c)
{
  const size_t len = length ();
  do { if ( pos > len ) __out_of_range ("pos > len"); } while (0) ;
  if (n1 > len - pos)
    n1 = len - pos;
  do { if ( len - n1 > max_size () - n2 ) __length_error ("len - n1 > max_size () - n2"); } while (0) ;
  size_t newlen = len - n1 + n2;

  if (check_realloc (newlen))
    {
      Rep *p = Rep::create (newlen);
      p->copy (0, data (), pos);
      p->copy (pos + n2, data () + pos + n1, len - (pos + n1));
      p->set  (pos, c, n2);
      repup (p);
    }
  else
    {
      rep ()->move (pos + n2, data () + pos + n1, len - (pos + n1));
      rep ()->set  (pos, c, n2);
    }
  rep ()->len = newlen;

  return *this;
}

template <class charT, class traits, class Allocator>
void basic_string <charT, traits, Allocator>::
resize (size_type n, charT c)
{
  do { if ( n > max_size () ) __length_error ("n > max_size ()"); } while (0) ;

  if (n > length ())
    append (n - length (), c);
  else
    erase (n);
}

template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
copy (charT* s, size_type n, size_type pos) const
{
  do { if ( pos > length () ) __out_of_range ("pos > length ()"); } while (0) ;

  if (n > length () - pos)
    n = length () - pos;

  traits::copy (s, data () + pos, n);
  return n;
}

template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
find (const charT* s, size_type pos, size_type n) const
{
  size_t xpos = pos;
  for (; xpos + n <= length (); ++xpos)
    if (traits::eq (data () [xpos], *s)
	&& traits::compare (data () + xpos, s, n) == 0)
      return xpos;
  return npos;
}

template <class charT, class traits, class Allocator>
inline basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
_find (const charT* ptr, charT c, size_type xpos, size_type len)
{
  for (; xpos < len; ++xpos)
    if (traits::eq (ptr [xpos], c))
      return xpos;
  return npos;
}

template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
find (charT c, size_type pos) const
{
  return _find (data (), c, pos, length ());
}

template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
rfind (const charT* s, size_type pos, size_type n) const
{
  if (n > length ())
    return npos;

  size_t xpos = length () - n;
  if (xpos > pos)
    xpos = pos;

  for (++xpos; xpos-- > 0; )
    if (traits::eq (data () [xpos], *s)
	&& traits::compare (data () + xpos, s, n) == 0)
      return xpos;
  return npos;
}

template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
rfind (charT c, size_type pos) const
{
  if (1 > length ())
    return npos;

  size_t xpos = length () - 1;
  if (xpos > pos)
    xpos = pos;

  for (++xpos; xpos-- > 0; )
    if (traits::eq (data () [xpos], c))
      return xpos;
  return npos;
}

template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
find_first_of (const charT* s, size_type pos, size_type n) const
{
  size_t xpos = pos;
  for (; xpos < length (); ++xpos)
    if (_find (s, data () [xpos], 0, n) != npos)
      return xpos;
  return npos;
}

template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
find_last_of (const charT* s, size_type pos, size_type n) const
{
  if (length() == 0)
    return npos;
  size_t xpos = length () - 1;
  if (xpos > pos)
    xpos = pos;
  for (++xpos; xpos-- > 0;)
    if (_find (s, data () [xpos], 0, n) != npos)
      return xpos;
  return npos;
}

template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
find_first_not_of (const charT* s, size_type pos, size_type n) const
{
  size_t xpos = pos;
  for (; xpos < length (); ++xpos)
    if (_find (s, data () [xpos], 0, n) == npos)
      return xpos;
  return npos;
}

template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
find_first_not_of (charT c, size_type pos) const
{
  size_t xpos = pos;
  for (; xpos < length (); ++xpos)
    if (traits::ne (data () [xpos], c))
      return xpos;
  return npos;
}

template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
find_last_not_of (const charT* s, size_type pos, size_type n) const
{
  if (length() == 0)
    return npos;
  size_t xpos = length () - 1;
  if (xpos > pos)
    xpos = pos;
  for (++xpos; xpos-- > 0;)
    if (_find (s, data () [xpos], 0, n) == npos)
      return xpos;
  return npos;
}

template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::
find_last_not_of (charT c, size_type pos) const
{
  if (length() == 0)
    return npos;
  size_t xpos = length () - 1;
  if (xpos > pos)
    xpos = pos;
  for (++xpos; xpos-- > 0;)
    if (traits::ne (data () [xpos], c))
      return xpos;
  return npos;
}

template <class charT, class traits, class Allocator>
int basic_string <charT, traits, Allocator>::
compare (const basic_string& _str, size_type pos, size_type n) const
{
  do { if ( pos > length () ) __out_of_range ("pos > length ()"); } while (0) ;

  size_t rlen = length () - pos;
  if (rlen > n)
    rlen = n;
  if (rlen > _str.length ())
    rlen = _str.length ();
  int r = traits::compare (data () + pos, _str.data (), rlen);
  if (r != 0)
    return r;
  if (rlen == n)
    return 0;
  return (length () - pos) - _str.length ();
}

template <class charT, class traits, class Allocator>
int basic_string <charT, traits, Allocator>::
compare (const charT* s, size_type pos, size_type n) const
{
  do { if ( pos > length () ) __out_of_range ("pos > length ()"); } while (0) ;

  size_t rlen = length () - pos;
  if (rlen > n)
    rlen = n;
  int r = traits::compare (data () + pos, s, rlen);
  if (r != 0)
    return r;
  return (length () - pos) - n;
}



template <class charT, class traits, class Allocator>
istream &
operator>> (istream &is, basic_string <charT, traits, Allocator> &s)
{
  int w = is.width (0);
  if (is.ipfx0 ())
    {
      register streambuf *sb = is.rdbuf ();
      s.resize (0);
      while (1)
	{
	  int ch = sb->sbumpc ();
	  if (ch == (-1) )
	    {
	      is.setstate (ios::eofbit);
	      break;
	    }
	  else if (traits::is_del (ch))
	    {
	      sb->sungetc ();
	      break;
	    }
	  s += static_cast<charT> (ch);
	  if (--w == 1)
	    break;
	}
    }

  is.isfx ();
  if (s.length () == 0)
    is.setstate (ios::failbit);

  return is;
}

template <class charT, class traits, class Allocator>
ostream &
operator<< (ostream &o, const basic_string <charT, traits, Allocator>& s)
{
  return o.write (s.data (), s.length ());
}

template <class charT, class traits, class Allocator>
istream&
getline (istream &is, basic_string <charT, traits, Allocator>& s, charT delim)
{
  if (is.ipfx1 ())
    {
      size_t   _count = 0;
      streambuf *sb = is.rdbuf ();
      s.resize (0);

      while (1)
	{
	  int ch = sb->sbumpc ();
	  if (ch == (-1) )
	    {
	      is.setstate (_count == 0
			   ? (ios::failbit|ios::eofbit)
			   : ios::eofbit);
	      break;
	    }

	  ++_count;

	  if (ch == delim)
	    break;

	  s += static_cast<charT> (ch);

	  if (s.length () == s.npos - 1)
	    {
	      is.setstate (ios::failbit);
	      break;
	    }
	}
    }

   
   
  is.isfx ();

  return is;
}

template <class charT, class traits, class Allocator>
basic_string <charT, traits, Allocator>::Rep
basic_string<charT, traits, Allocator>::nilRep = { 0, 0, 1, false };

template <class charT, class traits, class Allocator>
const basic_string <charT, traits, Allocator>::size_type
basic_string <charT, traits, Allocator>::npos;

}  
# 656 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/std/bastring.h" 2 3



# 6 "/usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/string" 2 3


extern "C++" {
typedef basic_string <char> string;



}  


# 1 "/home/andy/tmp/test.cc" 2


struct Bar
{
    std::string str;
};

int main()
{
  Bar bar = { "hello" };
}
---<snap>


>Fix:

Workaround: Explicitly initialize the struct, like this:

-----<snip>---
Bar bar;
bar.str = "hello";
-----<snap>---
>Release-Note:
>Audit-Trail:
>Unformatted:


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2002-10-11 18:01 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-10-10 17:26 c++/7929: ICE on struct initialization Joe Buck
  -- strict thread matches above, loose matches on Subject: below --
2002-10-11 11:01 jbuck
2002-10-11  1:36 Andreas Rottmann
2002-09-30  4:56 Andreas Rottmann
2002-09-30  2:46 Reichelt
2002-09-16  6:46 a.rottmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).