diff --git a/src/js/Abacus.js b/src/js/Abacus.js index 1627047..99dd8c2 100644 --- a/src/js/Abacus.js +++ b/src/js/Abacus.js @@ -1784,7 +1784,7 @@ CombinatorialIterator = Abacus.CombinatorialIterator = Class({ // some C-P-T processes at play here var klass = this, order = $ && $.order ? $.order : 0, C = klass.C, P = klass.P, T = klass.T; - if ( RANDOM & order ) item = REFLECTED & order ? P( item, n ) : item; + if ( RANDOM & order ) item = REFLECTED & order ? P( item, n ) : item.slice( ); else if (MINIMAL & order ) item = REFLECTED & order ? P( item, n ) : item.slice( ); else if ( COLEX & order ) item = REFLECTED & order ? C( item, n ) : P( C( item, n ), n ); else/*if ( LEX & order )*/item = REFLECTED & order ? P( item, n ) : item.slice( ); @@ -2510,7 +2510,7 @@ Tensor = Abacus.Tensor = Class(CombinatorialIterator, { // some C-P-T processes at play here var klass = this, order = $ && $.order ? $.order : 0, C = $ && "tuple"===$.type ? klass.C : CombinatorialIterator.C, P = klass.P, T = klass.T; - if ( RANDOM & order ) return REFLECTED & order ? P( item, n ) : item; + if ( RANDOM & order ) return REFLECTED & order ? P( item, n ) : item.slice( ); else if ( MINIMAL & order ) return REFLECTED & order ? P( item, n ) : item.slice( ); else if ( COLEX & order ) return REFLECTED & order ? C( item, n ) : P( C( item, n ), n ); else/*if ( LEX & order )*/return REFLECTED & order ? P( item, n ) : item.slice( ); @@ -2902,11 +2902,14 @@ Combination = Abacus.Combination = Class(CombinatorialIterator, { ) : ( 0 > dir ? array(n[1], n[0]-n[1], 1) : array(n[1], 0, 1) )); - if ( "binary" === type ) item = subset2binary(item, n[0]); return item; } ,cascade: CombinatorialIterator.cascade - ,dual: CombinatorialIterator.dual + ,dual: function( item, index, n, $ ) { + item = CombinatorialIterator.dual.call(this, item, index, n, $); + if ( $ && "binary" === $.type ) item = subset2binary(item, n[0]); + return item; + } ,succ: function( dir, item, index, n, $ ) { return next_combination( item, n, dir, $ && $.type ? $.type : "unordered" ); } @@ -3132,7 +3135,7 @@ Subset = Abacus.Powerset = Abacus.Subset = Class(CombinatorialIterator, { // some C-P-T processes at play here var klass = this, order = $ && $.order ? $.order : 0, C = klass.C, P = klass.P, T = klass.T; - if ( RANDOM & order ) item = REFLECTED & order ? item : P( item, n ); + if ( RANDOM & order ) item = REFLECTED & order ? item.slice( ) : P( item, n ); else if ( MINIMAL & order ) item = REFLECTED & order ? item.slice( ) : P( item, n ); else if ( COLEX & order ) item = REFLECTED & order ? P( C( item, n ), n ) : C( item, n ); else/*if ( LEX & order )*/item = REFLECTED & order ? item.slice( ) : P( item, n ); @@ -3294,7 +3297,7 @@ Partition = Abacus.Partition = Class(CombinatorialIterator, { K = $ && $["parts="] ? $["parts="]|0 : null, C = klass.C, P = klass.P, T = klass.T; if ( K && !M ) item = conjugatepartition(item); - if ( RANDOM & order ) item = REFLECTED & order ? P( item, n ) : item; + if ( RANDOM & order ) item = REFLECTED & order ? P( item, n ) : item.slice( ); else if ( MINIMAL & order ) item = REFLECTED & order ? P( item, n ) : item.slice( ); else if ( COLEX & order ) item = REFLECTED & order ? P( C( item, n ), n ) : C( item, n ); else/*if ( LEX & order )*/item = REFLECTED & order ? P( item, n ) : item.slice( ); diff --git a/src/js/Abacus.min.js b/src/js/Abacus.min.js index 4bca15e..065d19b 100644 --- a/src/js/Abacus.min.js +++ b/src/js/Abacus.min.js @@ -5,5 +5,5 @@ * @version: 0.7.0 * https://github.com/foo123/Abacus **/ -!function(n,e,t){"use strict";"undefined"!=typeof Components&&"object"==typeof Components.classes&&"object"==typeof Components.classesByID&&Components.utils&&"function"==typeof Components.utils["import"]?(n.$deps=n.$deps||{})&&(n.EXPORTED_SYMBOLS=[e])&&(n[e]=n.$deps[e]=t.call(n)):"object"==typeof module&&module.exports?(module.$deps=module.$deps||{})&&(module.exports=module.$deps[e]=t.call(n)):"undefined"!=typeof System&&"function"==typeof System.register&&"function"==typeof System["import"]?System.register(e,[],function(r){r(e,t.call(n))}):"function"==typeof define&&define.amd&&"function"==typeof require&&"function"==typeof require.specified&&require.specified(e)?define(e,["module"],function(e){return t.moduleUri=e.uri,t.call(n)}):e in n||(n[e]=t.call(n)||1)&&"function"==typeof define&&define.amd&&define(function(){return n[e]})}(this,"Abacus",function(n){"use strict";function e(){throw new Error("Method not implemented!")}function t(n){if(!arguments.length||null==n)return vn;if(sn(n)){var e,t=0,r=n.toUpperCase().split(","),u=r.length;for(e=0;u>e;e++)t|=un.call(nn.ORDER,r[e])?nn.ORDER[r[e]]:0;return t>0&&!(t&(An|yn))&&(t|=vn),t&yn&&(t&=~bn),t>0?t:vn}return n&yn&&(n&=~bn),wn&n?n:vn}function r(n,e,t){n=0|n;var r,u,i,l,o,a=n>0?new Array(n):[];if(n>0&&null!=e)if(u=15&n,r=1&u,e===+e){for(t=t||0,o=e,r&&(a[0]=o,o+=t),l=r;u>l;l+=2)i=l,a[i]=o,o+=t,i+=1,a[i]=o,o+=t;for(l=u;n>l;l+=16)i=l,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t}else if("function"==typeof e){for(r&&(a[0]=e(0)),l=r;u>l;l+=2)i=l,a[i]=e(i),i+=1,a[i]=e(i);for(l=u;n>l;l+=16)i=l,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i)}else{for(r&&(a[0]=e),l=r;u>l;l+=2)i=l,a[i]=e,i+=1,a[i]=e;for(l=u;n>l;l+=16)i=l,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e}return a}function u(n,e,t,r,u,i){var l,o,a=e;if(t&&an(t)){if(l=t.length,null==r&&(r=0),null==u&&(u=l-1),null==i&&(i=1),l>0)if(0>i)for(o=r;o>=u;o+=i)a=n(a,t[o],o);else for(o=r;u>=o;o+=i)a=n(a,t[o],o)}else if(i=i||1,l=(u-r)/i+1,l>0)if(0>i)for(o=r;o>=u;o+=i)a=n(a,o,o);else for(o=r;u>=o;o+=i)a=n(a,o,o);return a}function i(){var n,e,t,r,u,i,l,o,a,s,f=arguments,c=f.length;if(!c)return[];if(!0===f[0]){for(a=f[1].length,n=2;c>n;n++)a*=f[n].length;for(s=new Array(a),n=0;a>n;n++){for(o=0,i=1,t=n,e=1;c>e;e++)r=f[e].length,u=t%r,t=~~(t/r),l=f[e][u],o+=i*l,i*=r;s[n]=o}}else{for(a=f[0].length,n=1;c>n;n++)a*=f[n].length;for(s=new Array(a),n=0;a>n;n++){for(o=[],t=n,e=c-1;e>=0;e--)if(r=f[e].length,u=t%r,t=~~(t/r),l=f[e][u],an(l))for(i=l.length-1;i>=0;i--)o.unshift(l[i]);else o.unshift(l);s[n]=o}}return s}function l(n){return u(nn.Arithmetic.add,nn.Arithmetic.O,n)}function o(n){return u(nn.Arithmetic.mul,nn.Arithmetic.I,n)}function a(n){var e=nn.Arithmetic;return e.shl(e.I,e.N(n))}function s(n,e){var t=nn.Arithmetic,r=t.N;return t.pow(r(n),r(e))}function f(n,e){var t,r,i,l=nn.Arithmetic,o=l.O,a=l.I,s=l.J,c=l.N,d=l.add,_=(l.sub,l.div),m=l.mul;if(null==e)return 4>n?0>n?o:2>n?a:l.shl(c(n),n-2):(i=String(n),null==f.mem1[i]&&(f.mem1[i]=u(m,a,null,2,n)),f.mem1[i]);if(!1===e)return 3>n?2===n?a:o:(i=String(n),null==f.mem2[i]&&(f.mem2[i]=u(function(n,e){return d(1&e?s:a,m(n,e))},a,null,3,n)),f.mem2[i]);if(an(e)){if(!e.length)return 0>n?o:f(n);if(0>n)return o;if(i=String(n)+"@"+e.join(","),null==f.mem3[i]){for(t=f(e[e.length-1]),r=e.length-2;r>=0;r--)t=m(t,f(e[r]));f.mem3[i]=_(f(n),t)}return f.mem3[i]}return e===+e?0>e?-e>n?o:(i=String(n)+"@"+String(e),null==f.mem3[i]&&(f.mem3[i]=u(m,a,null,n+e+1,n)),f.mem3[i]):(e+e>n&&(e=n-e),0>e||1>n?o:0===e||1===n?a:1===e?c(n):(i=String(n)+"@"+String(e),null==f.mem3[i]&&(f.mem3[i]=_(f(n,-e),f(e))),f.mem3[i])):o}function c(n,e,t){var r,u,i,l,o=nn.Arithmetic,a=o.add,s=o.O;if(t===n&&1===e||e===n&&1===t)return o.I;if(t+e>n+1||n>e*t)return s;if(r=String(n)+","+String(e)+","+String(t),null==c.mem[r]){for(l=fn.max(1,fn.ceil((n-t)/(e-1))),i=fn.min(t,n-t-e+2),u=l;i>=u;u++)s=a(s,c(n-t,e-1,u));c.mem[r]=s}return c.mem[r]}function d(n,e){if(null==n)return null;if(!n.length)return[];var t,r=n.length,u=new Array(r);if(an(e))for(t=0;r>t;t++)u[t]=e[t]-1-n[t];else if(0>e)for(t=0;r>t;t++)u[t]=r-1-n[t];else for(e-=1,t=0;r>t;t++)u[t]=e-n[t];return u}function _(n){if(null==n)return null;for(var e=n.length-1,t=new Array(e+1),r=0;e>=r;r++)t[r]=n[e-r];return t}function m(n,e){if(null==e&&(e=0),an(n)){for(var t=n.length,r=new Array(t),u=0;t>u;u++)r[u]=e-n[u];return r}return n===+n&&e===+e?e-n:nn.Arithmetic.sub(nn.Arithmetic.N(e),n)}function h(n,e,t,r,u,i,l){null==t&&(t=0),null==r&&(r=n.length-1),null==u&&(u=0),null==i&&(i=e.length-1);var o=t>r?-1:1,a=u>i?-1:1,s=o*(r-t)+1,f=a*(i-u)+1,c=t,d=u,_=0;if(null===l&&(l=new Array(fn.min(s,f))),0===l.length)return l;for(;o*(r-c)>=0&&a*(i-d)>=0;)n[c]e[d]?d+=a:(l[_++]=n[c],c+=o,d+=a);return _u?-1:1,s=i>l?-1:1,f=a*(u-t)+1,c=t,d=t,_=0;if(!e||!e.length)return n===+n?r(n,t,a):n?n.slice():n;if(null==o&&(o=new Array(f)),n===+n){for(;a*(u-c)>=0&&s*(l-d)>=0;)c===e[d]?(c+=a,d+=a):c>e[d]?d+=s:(o[_++]=c,c+=a);for(;a*(u-c)>=0;)o[_++]=c,c+=a}else{for(;a*(u-c)>=0&&s*(l-d)>=0;)n[c]===e[d]?(c+=a,d+=a):n[c]>e[d]?d+=s:(o[_++]=n[c],c+=a);for(;a*(u-c)>=0;)o[_++]=n[c],c+=a}return _r?-1:1,c=u>i?-1:1,d=f*(r-t)+1,_=c*(i-u)+1,m=d+_,h=t,b=u,p=0,v=!l;if(null==a&&(a=new Array(m)),0===a.length)return!0===o?n:a;for(;f*(r-h)>=0&&c*(i-b)>=0;){if(l&&p){if(n[h]===s){h+=f;continue}if(e[b]===s){b+=c;continue}}n[h]e[b]?(a[p++]=s=e[b],b+=c):(a[p++]=s=n[h],v&&(a[p++]=e[b]),h+=f,b+=c)}for(;f*(r-h)>=0;)(v||n[h]!==s)&&(a[p++]=s=n[h]),h+=f;for(;c*(i-b)>=0;)(v||e[b]!==s)&&(a[p++]=s=e[b]),b+=c;if(!0===o){for(h=t,p=0;m>p;p++,h+=f)n[h]=a[p];return n}return pt?-1:1,u=r*(t-e)+1;if(1>=u)return n;for(var i,l,o=u,a=1,s=2,f=fn.min,c=new Array(u);o;){for(l=u-a,i=0;l>i;i+=s)p(n,n,e+r*i,e+r*(i+a-1),e+r*(i+a),e+r*f(i+s-1,u-1),!1,!0,c);a<<=1,s<<=1,o>>=1}return n}function g(n,e,t,r){var u,i,l,o,a=nn.Math.rndInt,s=!0===e?1:0;if(an(t))for(o=t,u=o.length;sa;a++)o[a]=n[i+c(0,d)];return t&&v(o),o}for(a=0;e>a;a++)s=c(0,--d),f=n[i+s],n[i+s]=n[i+d],n[i+d]=f,o[a]=f,u&&(u[a]=s);if(u)for(a=e-1;a>=0;a--)s=u[a],f=n[i+d],n[i+d]=n[i+s],n[i+s]=f,d++;return t&&v(o),o}function y(n,e){if(0>e)return[];var t,u=r(e,0,0),i=n.length;for(t=0;i>t;t++)u[n[t]]=1;return u}function A(n,e){e=fn.min(e||n.length,n.length);var t,r=[];for(t=0;e>t;t++)0i;i++)l=n[i],l[1]===o[i-1][0]?o[i-1][1]+=l[0]:o.push([l[1],l[0]]);else for(t=n[0],o=r(t,1,0),i=1;a>i;i++)for(u=0,l=n[i];t>u&&l>0;)o[u++]++,l--;return o}function M(n){if(null==n)return null;var e,t=[],r=n.length,u=n[0],i=[u,1];for(e=1;r>e;e++)u===n[e]?i[1]++:(t.push(i),u=n[e],i=[u,1]);return t.push(i),t}function I(n){if(null==n)return null;var e,t,r,u,i,l=[],o=n.length;for(e=0;o>e;e++)if(i=n[e],1===i[1])l.push(i[0]);else for(r=i[1],u=i[0],t=0;r>t;t++)l.push(u);return l}function O(n){if(null==n)return null;var e=0;return r(n.length,function(t){var u=n[t],i=r(u,e,1);return e+=u,i})}function C(n){return null==n?null:r(n.length,function(e){return n[e].length})}function E(n,e,t){e=e||n.length;var r,u,i,l,o,a=n.length,s=new Array(a),f=nn.Math.ceil(cn(e)),c=(1<<1+f)-1,d=new Array(c),_=1<r;r++)d[r]=0;for(u=m,r=0;a>r;r++,u+=h){for(o=n[r],l=_+o,i=0;f>i;i++)1&l&&(o-=d[l>>>1<<1]),d[l]+=1,l>>>=1;d[l]+=1,s[u]=o}return s}function R(n,e,t){e=e||n.length;var r,u,i,l,o,a,s,f,c,d,_=n.length,m=new Array(_),h=-1===t?_-1:0,b=-1===t?-1:1;for(s=nn.Math.ceil(cn(e)),f=(1<<1+s)-1,c=new Array(f),d=1<=r;r++)for(i=1,l=1<=i;i++)c[l-1+i]=1<r;r++,u+=b){for(o=n[r],a=1,i=0;s>i;i++)c[a]-=1,a<<=1,o>=c[a]&&(o-=c[a],a++);c[a]=0,m[u]=a-d}return m}function k(n,e,t){var r,u=n.length,i=null==e;if(u>1)for(i&&(e=new Array(u-1),t=0),r=u-1;r>=1;r--)e[t++]=[n[0],n[r]];else i&&(e=[]);return i?e:t}function S(n,e){var t,r,u,i,l=n.length,o=new Array(l),a=!0===e?1:0,s=new Array(l),f=0,c=0;for(t=0;l>t;t++)s[t]=0;for(u=new Array(l),i=0,r=f++,u[i++]=r,s[r]=1;l>f;){if(r=n[r],s[r])for(i>a&&(u.length=i,o[c++]=u),u=new Array(l),i=0;l>f&&s[r=f];)++f;s[r]||(u[i++]=r,s[r]=1)}return i>a&&(u.length=i,o[c++]=u),ce;e++)i=k(l[e],u,i);return it;t++)l[t]=t;for(t=0;i>t;t++)swap=r[t],u=l[r[0]],l[r[0]]=l[r[1]],l[r[1]]=u;return l}function L(n,e){var t,r,u=n.length,i=u*u,l=new Array(i);for(t=0,r=0;i>t;)l[t+r]=0,++r>=u&&(r=0,t+=u);if(!0===e)for(t=0;u>t;t++)l[u*n[t]+t]=1;else for(t=0,r=0;u>r;r++,t+=u)l[t+n[t]]=1;return l}function N(n,e){var t,r,u=n.length,i=fn.floor(fn.sqrt(u)),l=new Array(i);if(!0===e)for(t=0,r=0;i>t;)n[i*t+r]&&(l[r]=t),++r>=i&&(r=0,t++);else for(t=0,r=0;i>t;)n[t+r]&&(l[t]=r),++r>=i&&(r=0,t++);return l}function T(n){var e,t=n.length,r=new Array(t);for(e=0;t>e;e++)r[n[e]]=e;return r}function j(n){var e,t,r,u=n,i=u.length,l=i?u[0]:[],o=l.length;for(t=1;i>t;t++)for(r=l.slice(),e=0;o>e;e++)l[e]=r[u[t][e]];return l}function q(n){var e,t,r,u,i,l,o=n,a=o.length,s=0;for(r=0;a>r;r++)s+=o[r].length;for(e=new Array(s),u=0,r=0;a>r;r++){for(i=o[r],l=i.length,t=0;l>t;t++)e[u+t]=u+i[t];u+=l}return e}function X(n,e){if(e=e||n.length,e!==n.length)return!1;var t,r,u=new Array(e);for(t=0;e>t;t++)u[t]=0;for(t=0;e>t;t++){if(r=n[t],0>r||r>=e||0!==u[r])return!1;u[r]++}for(t=0;e>t;t++)if(1!==u[t])return!1;return!0}function D(n){for(var e=n.length,t=0;e>t;t++)if(n[t]!==t)return!1;return!0}function V(n){for(var e=n.length,t=1,r=n[0];e>t;t++)if(n[t]!==(r+t)%e)return!1;return!0}function J(n,e){e=e||1;var t,r=new Array(e+1);for(t=0;e>=t;t++)r[t]=n;return D(j(r))}function G(n,e,t){e=0|e;for(var r=0,u=n.length,i=0;u>i;i++)if(n[i]===i&&r++,r>e)return!1;return!0===t?r===e:!0}function H(n,e,t,r){if(n){var u,i,l,o=e,a=o.length;if(0>t)if("tuple"===r){for(u=o[0],o=o[1],i=u-1;i>=0&&n[i]<1;)i--;if(i>=0)for(n[i]--,o-=1,l=i+1;u>l;l++)n[l]=o;else n=null}else{for(i=a-1;i>=0&&n[i]<1;)i--;if(i>=0)for(n[i]--,l=i+1;a>l;l++)n[l]=o[l]-1;else n=null}else if("tuple"===r){for(u=o[0],o=o[1],i=u-1;i>=0&&n[i]+1===o;)i--;if(i>=0)for(n[i]++,l=i+1;u>l;l++)n[l]=0;else n=null}else{for(i=a-1;i>=0&&n[i]+1===o[i];)i--;if(i>=0)for(n[i]++,l=i+1;a>l;l++)n[l]=0;else n=null}return n}return null}function F(n,e,t,r){if(n){var u,i,l,o,a,s,f=e;if(0>t)if("cyclic"===r)n=n[0]>0?[n[f-1]].concat(n.slice(0,-1)):null;else do{for(s=!1,u=f-2;u>=0&&n[u]=0){for(i=f-1;i>u&&n[u]l;)a=n[l],n[l]=n[o],n[o]=a,s=s||l===n[l]||o===n[o],l++,o--;if(s=s||u===n[u]||o===n[o],"derangement"===r){if(!s)for(l=u-1;l>=0;l--)if(l===n[l]){s=!0;break}}else s=!1}else n=null}while(n&&s);else if("cyclic"===r)n=n[0]+1=0&&n[u]>n[u+1];)u--;if(u>=0){for(i=f-1;i>u&&n[u]>n[i];)i--;for(a=n[u],n[u]=n[i],n[i]=a,l=u+1,o=f-1;o>l;)a=n[l],n[l]=n[o],n[o]=a,s=s||l===n[l]||o===n[o],l++,o--;if(s=s||u===n[u]||o===n[o],"derangement"===r){if(!s)for(l=u-1;l>=0;l--)if(l===n[l]){s=!0;break}}else s=!1}else n=null}while(n&&s);return n}return null}function U(n,e,t,r){if(n){var u,i,l,o,a,s,f,c=e[1],d=e[0];if(0>t)if("ordered+repeated"===r){for(i=c-1;i>=0&&n[i]<1;)i--;if(i>=0)for(n[i]--,d-=1,l=i+1;c>l;l++)n[l]=d;else n=null}else if("ordered"===r){for(u={},i=0;c>i;i++)u[n[i]]=i;for(i=c-1,o=-1;-1===o&&i>=0;){if(n[i]-1>=0)for(l=n[i]-1;l>=0;l--)if(null==u[l]){o=i,u[l]=o;break}u[n[i]]=null,i--}if(o>-1)for(n[o]=l,l=d-1,i=o+1;c>i;i++){for(;l>=0&&null!=u[l];)l--;n[i]=l,u[l]=i}else n=null}else{for(f="repeated"===r?0:1,i=c-1,o=-1;i>0;){if(n[i]>n[i-1]+f){o=i;break}i--}if(-1===o&&0-1){for(s=d-1+f,i=c-1;i>o;i--)s-=f,n[i]=s;n[o]--}else n=null}else if("ordered+repeated"===r){for(i=c-1;i>=0&&n[i]+1===d;)i--;if(i>=0)for(n[i]++,l=i+1;c>l;l++)n[l]=0;else n=null}else if("ordered"===r){for(u={},i=0;c>i;i++)u[n[i]]=i;for(i=c-1,o=-1;-1===o&&i>=0;){if(n[i]+1l;l++)if(null==u[l]){o=i,u[l]=o;break}u[n[i]]=null,i--}if(o>-1)for(n[o]=l,l=0,i=o+1;c>i;i++){for(;d>l&&null!=u[l];)l++;n[i]=l,u[l]=i}else n=null}else{if(i=c-1,o=-1,"repeated"===r)for(f=0;i>=0;){if(n[i]+1=0;){if(n[i]-1)for(s=n[o]+1-f,i=o;c>i;i++)s+=f,n[i]=s;else n=null}return n}return null}function B(n,e,t,u,i){if(u&&i)return null;if(n){var l,o,a,s,f,c,d=e;if(0>t)if(u&&(i=u,u=null),o=i?1:0,n.length>o&&n[o]>1){for(l=n.length-1,c=0;l>=o&&1===n[l];)c+=n[l],l--;f=n[l]-1,c++,n[l]=f,n=n.slice(0,l+1),c>f?n=n.concat(r(fn.floor(c/f),f),(c%=f)?[c]:[]):c>0&&(n=n.concat([c]))}else n=null;else if(u&&(i=u,u=null),o=i?1:0,a=i?n.length-1:0,f=i?d%i||i:d,n.length>o&&n[a]1?(l=s-2,c=n[s-1]):(l=s-1,c=0);l>o&&n[l]===n[l-1];)c+=n[l],l--;n[l]++,c--,n=c>0?n.slice(0,l+1).concat(r(c,1)):n.slice(0,l+1)}else n=null;return n}return null}var Y,z,K,Q,W,Z,nn={VERSION:"0.7.0"},en="prototype",tn="constructor",rn=Array.prototype.slice,un=Object[en].hasOwnProperty,ln=Object[en].toString,on=/^\s+|\s+$/g,an=(String.prototype.trim?function(n){return n.trim()}:function(n){return n.replace(on,"")},function(n){return n instanceof Array||"[object Array]"===ln.call(n)}),sn=function(n){return n instanceof String||"[object String]"===ln.call(n)},fn=Math,cn=fn.log2||function(n){return fn.log(n)/fn.LN2},dn=function(n){var e=n.toString(2),t=32-e.length;return t>0?new Array(t+1).join("0")+e:e},_n=Object.create,mn=function(n,e){for(var t in e)un.call(e,t)&&(n[t]=e[t]);return n},hn=function(n,e){1===arguments.length&&(e=n,n=Object);var t=e[tn];return un.call(e,"__static__")&&(t=mn(t,e.__static__),delete e.__static__),t[en]=mn(_n(n[en]),e),t},bn=1,pn=2,vn=4,gn=8,xn=16,yn=32,An=vn|gn|xn,wn=An|yn|bn|pn;return f.mem1={},f.mem2={},f.mem3={},c.mem={},nn.$={MAXMEM:1e6,RANDOM:"index"},nn.ORDER={LEX:vn,LEXICOGRAPHIC:vn,REVLEX:vn|bn,ANTILEX:vn|bn,REVERSELEXICOGRAPHIC:vn|bn,ANTILEXICOGRAPHIC:vn|bn,REFLEX:vn|pn,REFLECTEDLEXICOGRAPHIC:vn|pn,COLEX:gn,COLEXICOGRAPHIC:gn,REVCOLEX:gn|bn,ANTICOLEX:gn|bn,REVERSECOLEXICOGRAPHIC:gn|bn,ANTICOLEXICOGRAPHIC:gn|bn,REFCOLEX:gn|pn,REFLECTEDCOLEXICOGRAPHIC:gn|pn,REV:bn,REVERSE:bn,REVERSED:bn,REF:pn,REFLECT:pn,REFLECTED:pn,RANDOM:yn,GRAY:xn,MINIMAL:xn},nn.Util={array:r,operate:u,intersect:h,difference:b,merge:p,conjugation:d,parity:_,inversion:m,mergesort:v,shuffle:g,pick:x},nn.Math={O:0,I:1,J:-1,N:function(n){return nn.Arithmetic.add(nn.Arithmetic.O,n)},V:function(n){return nn.Arithmetic.sub(nn.Arithmetic.O,n)},rnd:fn.random,rndInt:function(n,e){return nn.Math.round((e-n)*nn.Math.rnd()+n)},equ:function(n,e){return n===e},gte:function(n,e){return n>=e},lte:function(n,e){return e>=n},gt:function(n,e){return n>e},lt:function(n,e){return e>n},inside:function(n,e,t,r){return r?n>=e&&t>=n:n>e&&t>n},clamp:function(n,e,t){return e>n?e:n>t?t:n},wrap:function(n,e,t){return e>n?t:n>t?e:n},wrapR:function(n,e){return 0>n?n+e:n},add:function(n,e){return n+e},sub:function(n,e){return n-e},mul:function(n,e){return n*e},div:function(n,e){return nn.Math.floor(n/e)},mod:function(n,e){return n%e},pow:fn.pow,shl:function(n,e){return n<>e},bor:function(n,e){return n|e},band:function(n,e){return n&e},xor:function(n,e){return n^e},abs:fn.abs,min:fn.min,max:fn.max,floor:fn.floor,ceil:fn.ceil,round:fn.round,num:function(n){return"number"==typeof n?nn.Math.floor(n):parseInt(n,10)},val:function(n){return nn.Math.floor(n.valueOf())},sum:l,product:o,pow2:a,exp:s,factorial:f,partitions:c},nn.Arithmetic={O:0,I:1,J:-1,N:nn.Math.N,V:nn.Math.V,equ:nn.Math.equ,gte:nn.Math.gte,lte:nn.Math.lte,gt:nn.Math.gt,lt:nn.Math.lt,inside:nn.Math.inside,clamp:nn.Math.clamp,wrap:nn.Math.wrap,wrapR:nn.Math.wrapR,add:nn.Math.add,sub:nn.Math.sub,mul:nn.Math.mul,div:nn.Math.div,mod:nn.Math.mod,pow:nn.Math.pow,shl:nn.Math.shl,shr:nn.Math.shr,bor:nn.Math.bor,band:nn.Math.band,xor:nn.Math.xor,abs:nn.Math.abs,min:nn.Math.min,max:nn.Math.max,floor:nn.Math.floor,ceil:nn.Math.ceil,round:nn.Math.round,rnd:nn.Math.rndInt,num:nn.Math.num,val:nn.Math.val},nn.Class=hn,nn.BitArray=hn({constructor:function Mn(n){var e=this;return e instanceof Mn?(e.length=n,void(e.bits=new Uint32Array(nn.Math.ceil(n/32)))):new Mn(n)},length:0,bits:null,dispose:function(){var n=this;return n.length=null,n.bits=null,n},clone:function(){var n=this,e=new nn.BitArray(n.length);return e.bits=new Uint32Array(n.bits),e},fromArray:function(n){var e=this;return e.bits=new Uint32Array(n),e},toArray:function(){return rn.call(this.bits)},toString:function(){var n,e,t=this.toArray();for(n=0,e=t.length;e>n;n++)t[n]=dn(t[n]);return t.join("")},reset:function(){var n,e=this,t=e.bits,r=t.length;for(n=0;r>n;n++)t[n]=0;return e},isset:function(n){return!!(this.bits[n>>>5]&1<<(31&n))},set:function(n){var e=this;return e.bits[n>>>5]|=1<<(31&n),e},unset:function(n){var e=this;return e.bits[n>>>5]&=~(1<<(31&n)),e},toggle:function(n){var e=this;return e.bits[n>>>5]^=1<<(31&n),e}}),Y=nn.CombinatorialIterator=hn({constructor:function In(n,e,t){var r=this,u=r[tn];r.name=n||"CombinatorialIterator",r.n=e||0,r.$=t=t||{},t.type=String(t.type||"default").toLowerCase(),t.order=t.order||vn,t.base=t.base||0,t.dimension=t.dimension||0,t.rand=t.rand||{},t.count=u.count(r.n,r.$),t.sub instanceof In&&(t.subcount=nn.Arithmetic.mul(t.count,t.sub.total()),t.submethod=String(t.submethod||"project").toLowerCase(),t.subcascade=-1===t.subcascade?-1:1,"concatenate"===t.submethod?t.dimension=t.dimension+t.sub.dimension():"compose"===t.submethod&&(t.dimension=t.dimension*t.sub.dimension())),r.order(t.order)},__static__:{Iterable:function On(n,e){var t=this;return t instanceof On?(e=-1===e?-1:1,void(t.next=function(){return n.hasNext(e)?{value:n.next(e)}:{done:!0}})):new On(n)},C:function(n,e){return d(n,e)},P:function(n,e){return _(n)},T:function(n,e){return m(n,e)},count:e,initial:e,cascade:function(n,e,t,u){if(-1===u){var l=n;n=e,e=l}return"concatenate"===t?n&&e?n.concat(e):n||e||null:"compose"===t?n&&e?i(!0,n,e):n||e||null:null==n||null==e?null:r(n.length,function(t){return n[t]n?l.J:l.I),r,u)},rand:function(n,e){var t=this,r=nn.Arithmetic,u=r.sub(e&&e.count?e.count:t.count(n,e),r.I),i=r.O,l=r.rnd(i,u);return r.equ(i,l)?t.initial(1,n,e):r.equ(u,l)?t.initial(-1,n,e):t.unrank(l,n,e)},rank:e,unrank:e},name:"CombinatorialIterator",n:0,$:null,__index:null,_index:null,__item:null,_item:null,__subindex:null,_subindex:null,__subitem:null,_subitem:null,_prev:null,_next:null,_traversed:null,dispose:function(n){var e=this;return!0!==n&&e.$.sub&&(e.$.sub.dispose(),e.$.sub=null),e.name=null,e.n=null,e.$=null,e.__index=null,e._index=null,e.__item=null,e._item=null,e.__subindex=null,e._subindex=null,e.__subitem=null,e._subitem=null,e._prev=null,e._next=null,e._traversed&&(e._traversed.dispose(),e._traversed=null),e},base:function(){return this.$.base||0},dimension:function(){return this.$.dimension||0},total:function(n){var e=this.$;return e.sub&&!0!==n?e.subcount||e.count||0:e.count||0},_init:function(n,e){var t,r,u,i=this,l=i[tn],o=i.$,a=i.n,s=nn.Arithmetic,f=s.O,c=s.I,d=o.order;return i.__index=i._index=f,i._item=i.__item=null,i._prev=!1,i._next=!1,r=o.count,u=s.sub(r,c),yn&d?"gen"===nn.$.RANDOM||1===o.rand[o.type]||s.gt(r,nn.$.MAXMEM)?(i.__item=l.rand(a,o),i.__index=null):(i._traversed&&i._traversed.dispose(),i._traversed=new nn.BitArray(s.val(r)),t=i.random("index"),i._traversed.set(+t),i.__item=l.unrank(t,a,o),null!=i.__item&&(i.__index=t)):gn&d?(i.__item=l.initial(-n,a,o),null!=i.__item&&(i.__index=-1===n?f:u)):(i.__item=l.initial(n,a,o),null!=i.__item&&(i.__index=-1===n?u:f)),i._item=null==i.__item?null:l.dual(i.__item,i.__index,a,o),i._index=!e||yn&d?f:u,null===i.__index&&(i.__index=f),i._prev=yn&d||!e?!1:null!=i.__item,i._next=!e||yn&d?null!=i.__item:!1,i},order:function(n,e){if(!arguments.length)return this._order;var r,u,i,l,o,a=this,s=a[tn],f=nn.Arithmetic,c=(f.O,f.I,!0===n);return e=-1===e,i=a.n,l=a.$,a._traversed&&(a._traversed.dispose(),a._traversed=null),c?n=l.order:sn(n)&&-1<(u=n.indexOf("|"))?(r=n.substr(u+1),n=t(n.substr(0,u))):r=n=t(n),o=bn&n?-1:1,o=e?-o:o,l.order=n,l.sub?(c?l.sub.rewind(e?-1:1):l.sub.order(r,e?-1:1),a.__subindex=l.sub.index(),a.__subitem=l.sub.next(e?-1:1),a._subindex=null,a._subitem=null):(a.__subindex=null,a.__subitem=null,a._subindex=null,a._subitem=null),a._init(o,e),l.sub&&(a._prev=a._prev&&null!=a.__subitem,a._next=a._next&&null!=a.__subitem,a._subindex=f.add(f.mul(a._index,l.sub.total()),a.__subindex),a._subitem=s.cascade(a._item,a.__subitem,l.submethod,l.subcascade)),a},index:function(n,e){if(e=!0===e,!arguments.length)return this.$.sub?this._subindex:this._index;var t,r=this,u=r[tn],i=nn.Arithmetic,l=i.O,o=i.I,a=i.J,s=r.n,f=r.$,c=f.sub&&!e?f.subcount:f.count,d=f.sub&&!e?r._subindex:r._index,_=f.order,m=bn&_?-1:1;return n=i.wrapR(i.N(n),c),!i.equ(n,d)&&i.inside(n,a,c)&&(f.sub&&!e&&(f.sub.index(i.mod(n,f.sub.total())),r.__subindex=f.sub.index(),r.__subitem=f.sub.item(),n=i.div(n,f.sub.total()),c=f.count),t=i.sub(c,o),gn&_?(r.__index=-1===m?n:i.sub(t,n),r._index=n,r.__item=i.equ(l,n)?u.initial(-m,s,f):i.equ(t,n)?u.initial(m,s,f):u.unrank(r.__index,s,f),r._item=u.dual(r.__item,r.__index,s,f),r._prev=null!=r.__item,r._next=null!=r.__item):yn&_||(r.__index=-1===m?i.sub(t,n):n,r._index=n,r.__item=i.equ(l,n)?u.initial(m,s,f):i.equ(t,n)?u.initial(-m,s,f):u.unrank(r.__index,s,f),r._item=u.dual(r.__item,r.__index,s,f),r._prev=null!=r.__item,r._next=null!=r.__item),f.sub&&(r._prev=r._prev&&null!=r.__subitem,r._next=r._next&&null!=r.__subitem,r._subindex=i.add(i.mul(r._index,f.sub.total()),r.__subindex),r._subitem=u.cascade(r._item,r.__subitem,f.submethod,f.subcascade))),r},item:function(n,e){if(!arguments.length)return this.$.sub?this._subitem:this._item;var r,u,i,l,o,a,s,f=this,c=f[tn],d=f.n,_=f.$,m=_.sub?_.subcount:_.count,h=_.sub?f._subindex:f._index,b=nn.Arithmetic,p=b.O,v=b.I,g=b.J,x=null;return sn(e)?-1<(s=e.indexOf("|"))?(x=e.substr(s+1),e=t(e.substr(0,s))):x=e=t(e):null!=e?x=e=t(e):(e=_.order,x=null),_.sub||(x=null),an(n)?(m=_.count,i=bn&e?-1:1,r=b.sub(m,v),f.__item=n.slice(),f.__index=c.rank(f.__item,d,_),yn&e?(f._index=f.__index,l=_.order,_.order=e,f._item=c.dual(f.__item,f.__index,d,_),_.order=l):gn&e?(f._index=-1===i?f.__index:b.sub(r,f.__index),l=_.order,_.order=e,f._item=c.dual(f.__item,f.__index,d,_),_.order=l):(f._index=-1===i?b.sub(r,f.__index):f.__index,l=_.order,_.order=e,f._item=c.dual(f.__item,f.__index,d,_),_.order=l),f):(n=b.wrapR(b.N(n),m),e===_.order&&null===x&&b.equ(n,h)?_.sub?f._subitem:f._item:b.inside(n,g,m)?(a=null,_.sub&&(a=_.sub.item(b.mod(n,_.sub.total()),x),n=b.div(n,_.sub.total()),m=_.count),i=bn&e?-1:1,r=b.sub(m,v),yn&e?(u=null,l=_.order,_.order=e,o=c.dual(c.rand(d,_),u,d,_),_.order=l,_.sub&&(o=c.cascade(o,a,_.submethod,_.subcascade)),o):gn&e?(u=-1===i?n:b.sub(r,n),l=_.order,_.order=e,o=c.dual(b.equ(p,n)?c.initial(-i,d,_):b.equ(r,n)?c.initial(i,d,_):c.unrank(u,d,_),u,d,_),_.order=l,_.sub&&(o=c.cascade(o,a,_.submethod,_.subcascade)),o):(u=-1===i?b.sub(r,n):n,l=_.order,_.order=e,o=c.dual(b.equ(p,n)?c.initial(i,d,_):b.equ(r,n)?c.initial(-i,d,_):c.unrank(u,d,_),u,d,_),_.order=l,_.sub&&(o=c.cascade(o,a,_.submethod,_.subcascade)),o)):null)},random:function(n,e,t,r){var u,i=this,l=i[tn],o=i.$,a=o.order;if(r=!0===r,"index"===n){var s,f=nn.Arithmetic,c=f.N,d=f.O,_=f.I;return e===!!e&&(r=e,e=null,t=null),s=o.sub&&!r?o.subcount:o.count,null==e&&null==t?(e=d,t=f.sub(s,_)):null==t?(e=c(e||0),t=f.sub(s,_)):(e=c(e),t=c(t)),f.rnd(e,t)}return o.order|=yn,u=l.rand(i.n,o),o.order=a,u=l.dual(u,null,i.n,o),o.sub&&!r?l.cascade(u,o.sub.random(),o.submethod,o.subcascade):u},rewind:function(n){var e=this;return e.order(!0,-1===n?-1:1)},hasNext:function(n){var e=this;return-1===n?yn&e.$.order?!1:e._prev:e._next},next:function(n){var e,t,r,u,i,l=this,o=l[tn],a=nn.Arithmetic,s=a.O,f=a.I,c=a.J,d=l.n,_=l.$,m=_.order,h=_.count,b=_.sub?l._subitem:l._item;if(r=-1===n,n=bn&m?-1:1,r)return yn&m?null:(gn&m?(l.__item=o.succ(n,l.__item,l.__index,d,_),null!=l.__item&&(l.__index=a.add(l.__index,0>n?c:f))):(l.__item=o.succ(-n,l.__item,l.__index,d,_),null!=l.__item&&(l.__index=a.add(l.__index,n>0?c:f))),l._prev=null!=l.__item,l._prev?l._index=a.sub(l._index,f):_.sub&&_.sub.hasNext(-1)?(l.__subindex=_.sub.index(),l.__subitem=_.sub.next(-1),l._init(-n,r)):(l.__subindex=null,l.__subitem=null),l._item=null==l.__item?null:o.dual(l.__item,l.__index,d,_),_.sub&&(l._prev=l._prev&&null!=l.__subitem,l._subindex=l._prev?a.add(a.mul(l._index,_.sub.total()),l.__subindex):null,l._subitem=l._prev?o.cascade(l._item,l.__subitem,_.submethod,_.subcascade):null),b);if(yn&m)if(u=a.sub(h,f),a.lt(l._index,u))if(e=l._traversed){for(t=l.random("index"),i=nn.Math.rnd()>.5?c:f;e.isset(+t);)t=a.wrap(a.add(t,i),s,u);e.set(+t),l.__item=o.unrank(t,d,_),null!=l.__item&&(l.__index=t)}else l.__item=o.rand(d,_),l.__index=null;else l._item=l.__item=null,l._traversed&&(l._traversed.dispose(),l._traversed=null);else gn&m?(l.__item=o.succ(-n,l.__item,l.__index,d,_),null!=l.__item&&(l.__index=a.add(l.__index,n>0?c:f))):(l.__item=o.succ(n,l.__item,l.__index,d,_),null!=l.__item&&(l.__index=a.add(l.__index,0>n?c:f)));return l._next=null!=l.__item,l._next?(l._index=a.add(l._index,f),null===l.__index&&(l.__index=l._index)):_.sub&&_.sub.hasNext()?(l.__subindex=_.sub.index(),l.__subitem=_.sub.next(),l._init(n,r)):(l.__subindex=null,l.__subitem=null),l._item=null==l.__item?null:o.dual(l.__item,l.__index,d,_),_.sub&&(l._next=l._next&&null!=l.__subitem,l._subindex=l._next?a.add(a.mul(l._index,_.sub.total()),l.__subindex):null,l._subitem=l._next?o.cascade(l._item,l.__subitem,_.submethod,_.subcascade):null),b},range:function(n,e){var t,r,u,i,l,o=this,a=nn.Arithmetic,s=a.N,f=a.O,c=a.I,d=o.$,_=d.sub?d.subcount:d.count,m=1,h=arguments.length,b=a.sub(_,c),p=!(yn&d.order);if(1>h?(n=f,e=b):2>h?(n=s(n),e=b):(n=s(n),e=s(e)),n=a.wrapR(n,_),e=a.wrapR(e,_),a.gt(n,e)&&(t=n,n=e,e=t,m=-1),n=a.clamp(n,f,b),p&&(e=a.clamp(e,f,b)),a.lte(n,e)){if(l=[o.$.order,o.__index,o._index,o.__item&&o.__item.slice(),o._item&&o._item.slice(),o.__subindex,o._subindex,o.__subitem&&o.__subitem.slice(),o._subitem&&o._subitem.slice(),o._prev,o._next],p&&o.index(n),u=a.val(a.sub(e,n)),r=new Array(u+1),0>m)for(i=u;i>=0;i--)r[i]=o.next();else for(i=0;u>=i;i++)r[i]=o.next();o.$.order=l[0],o.__index=l[1],o._index=l[2],o.__item=l[3],o._item=l[4],o.__subindex=l[5],o._subindex=l[6],o.__subitem=l[7],o._subitem=l[8],o._prev=l[9],o._next=l[10]}else r=[];return r},__iter__:function(){return new Y.Iterable(this)}}),"undefined"!=typeof Symbol&&"undefined"!=typeof Symbol.iterator&&(Y[en][Symbol.iterator]=Y[en].__iter__),z=nn.Tensor=hn(Y,{constructor:function Cn(){var n,e=this,t=rn.call(arguments);return n=!t.length||t[t.length-1]instanceof Y||an(t[t.length-1])||t[t.length-1]===+t[t.length-1]?{}:t.pop()||{},n.type=String(n.type||"tensor").toLowerCase(),n.order=n.order||vn,t.length&&an(t[0])&&(t=t[0]),t&&t.length||(t=[]),e instanceof Cn?("tuple"===n.type?(t[0]=t[0]||1,t[1]=t[1]||1,t[0]instanceof Y?(n.sub=t[0],t[0]=n.sub.dimension()):t[1]instanceof Y&&(n.sub=t[1],t[1]=n.sub.base()),n.base=t[1],n.dimension=t[0]):(n.base=u(function(n,e){return e>n?e:n},0,t),n.dimension=t.length),void Y.call(e,"Tensor",t,n)):new Cn(t,n)},__static__:{C:function(n,e){return d(n,e[1])},P:Y.P,T:Y.T,count:function(n,e){return e&&"tuple"===e.type?n&&n[0]?nn.Math.exp(n[0],n[1]):0:n&&n.length?nn.Math.product(n):0},initial:function(n,e,t){var u=t&&"tuple"===t.type?e[0]?0>n?r(e[0],e[1]-1,0):r(e[0],0,0):[]:e.length?0>n?r(e.length,function(n){return e[n]-1}):r(e.length,0,0):[];return u},cascade:Y.cascade,dual:function(n,e,t,r){if(null==n)return null;var u=this,i=r&&r.order?r.order:0,l=r&&"tuple"===r.type?u.C:Y.C,o=u.P;u.T;return yn&i?pn&i?o(n,t):n:xn&i?pn&i?o(n,t):n.slice():gn&i?pn&i?l(n,t):o(l(n,t),t):pn&i?o(n,t):n.slice()},succ:function(n,e,t,r,u){return H(e,r,n,u&&u.type?u.type:"tensor")},rand:function(n,e){var t,u=nn.Math.rndInt;return t=e&&"tuple"===e.type?n[0]?r(n[0],function(e){return u(0,n[1]-1)}):[]:n.length?r(n.length,function(e){return u(0,n[e]-1)}):[]},randu:Y.rand,rank:function(n,e,t){var r,u,i,l=nn.Arithmetic,o=l.add,a=l.mul,r=l.O,s=l.J;if(t&&"tuple"===t.type){if(u=e[0],!u)return s;for(e=e[1],i=0;u>i;i++)r=o(a(r,e),n[i])}else{if(u=e.length,!u)return s;for(i=0;u>i;i++)r=o(a(r,e[i]),n[i])}return r},unrank:function(n,e,t){var r,u,i,l,o,a,s=nn.Arithmetic,f=s.mod,c=s.div,d=s.val;if(t&&"tuple"===t.type){if(a=e[0],!a)return[];for(o=new Array(a),u=e[1],r=n,i=a-1;i>=0;i--)l=f(r,u),r=c(r,u),o[i]=d(l)}else{if(a=e.length,!a)return[];for(o=new Array(a),r=n,i=a-1;i>=0;i--)u=e[i],l=f(r,u),r=c(r,u),o[i]=d(l)}return o},product:i,component:function(n,e){var t,r,u,i,l,o,a=[],s=e,f=s.length;for(t=0;f>t;t++)if(u=s[t],l=n[t],i=u[l],i instanceof Array)for(r=0,o=i.length;o>r;r++)a.push(i[r]);else a.push(i);return a}}}),K=nn.Permutation=hn(Y,{constructor:function En(n,e){var t=this;return t instanceof En?(e=e||{},e.type=e.type||"permutation",n=n||1,n instanceof Y&&(e.sub=n,n=e.sub.dimension()),e.base=e.dimension=n,e.rand={derangement:1,involution:1},void Y.call(t,"Permutation",n,e)):new En(n,e)},__static__:{C:function(n,e){return d(n,-1)},P:Y.P,T:Y.T,count:function(n,e){var t=e&&e.type?e.type:"permutation";return"cyclic"===t?nn.Arithmetic.N(n):nn.Math.factorial(n,"derangement"===t?!1:null)},initial:function(n,e,t){var u,i=t&&t.type?t.type:"permutation";if("cyclic"===i)u=0>n?[e-1].concat(r(e-1,0,1)):r(e,0,1);else if("derangement"===i){if(2>e)return null;if(1&e){var l=fn.floor(e/2);u=0>n?r(e-l-1,e-1,-1).concat([l-1,l]).concat(r(l-1,l-2,-1)):r(e-3,function(n){return 1&n?n-1:n+1}).concat([e-2,e-1,e-3])}else u=0>n?r(e,e-1,-1):r(e,function(n){return 1&n?n-1:n+1})}else u=0>n?r(e,e-1,-1):r(e,0,1);return u},cascade:Y.cascade,dual:Y.dual,succ:function(n,e,t,r,u){var i=u&&u.type?u.type:"permutation";return"involution"===i||"multiset"===i?null:F(e,r,n,i)},rand:function(n,t){var u=nn.Math.rndInt,i=t&&t.type?t.type:"permutation";if("cyclic"===i){var l=u(0,n-1);return l>0?r(n-l,l,1).concat(r(l,0,1)):r(n,0,1)}if("derangement"===i){var o,a,s,f=!1,c=new Array(n);do{for(o=0;n>o;o++)c[o]=o;for(o=n-1,f=!1;o>=0;){if(s=u(0,o),c[s]===o){f=!0;break}a=c[o],c[o]=c[s],c[s]=a,o--}f=f||0===c[0]}while(f);return c}return"involution"===i||"multiset"===i?e():g(r(n,0,1))},randu:Y.rand,rank:function(n,t,r){var u,i,l=nn.Arithmetic,o=r&&r.type?r.type:"permutation",a=l.add,s=l.mul,f=l.O;if(t=t||n.length,!t)return l.J;if("cyclic"===o)return n[0];if("derangement"===o)return e();if("involution"===o||"multiset"===o)return e(); -for(n=E(n),i=t-1,u=0;i>u;u++)f=a(s(f,t-u),n[u]);return f},unrank:function(n,t,u){var i,l,o,a,s,f=nn.Arithmetic,c=u&&u.type?u.type:"permutation",d=f.mod,_=f.div,m=f.val;if(!t)return[];if("cyclic"===c)return n=m(n),r(t,function(e){return(n+e)%t});if("derangement"===c)return e();if("involution"===c||"multiset"===c)return e();for(i=r(t),i[t-1]=0,l=n,o=t-2;o>=0;o--)a=t-o,s=d(l,a),l=_(l,a),i[o]=m(s);return R(i)},permute:function(n,e,t){var u,i,l,o=n.length;for(!0===t?(i=r(o),l=n):(i=n,l=n.slice()),u=0;o>u;u++)i[u]=l[e[u]];return i},shuffle:function(n,e){if(!0===e){var t=n.length,r=nn.Math.rndInt(0,t-1);return r>0&&n.push.apply(n,n.splice(0,r)),n}return g(n)},compose:function(){return j(rn.call(arguments))},concatenate:function(){return q(rn.call(arguments))},inverse:function(n){return T(n)},cycles:function(n,e){return-1===e?cycles2permutation(n):S(n)},swaps:function(n,e){return-1===e?P(n):$(n)},inversion:function(n,e){return-1===e?R(n):E(n)},matrix:function(n,e,t){return-1===t?N(n,e):L(n,e)},parity:e,is_permutation:X,is_identity:D,is_cyclic:V,is_derangement:G,is_involution:function(n){return J(n,1)},is_kthroot:function(n,e){return e>1?J(n,e-1):!1},is_connected:function(n){var e,t=n.length,r=-1;for(e=0;t-1>e;e++)if(n[e]>r&&(r=n[e]),e>=r)return!1;return!0}}}),Q=nn.Combination=hn(Y,{constructor:function Rn(n,e,t){var r=this;if(!(r instanceof Rn))return new Rn(n,e,t);if(an(n)?(t=e||{},e=n[1]||1,n=n[0]||1):(t=t||{},n=n||1,e=e||1),t.type=String(t.type||"unordered").toLowerCase(),-1n?r(e[1],e[0]-1,0):r(e[1],0,0):"ordered"===u?0>n?r(e[1],e[0]-1,-1):r(e[1],0,1):0>n?r(e[1],e[0]-e[1],1):r(e[1],0,1);return"binary"===u&&(i=y(i,e[0])),i},cascade:Y.cascade,dual:Y.dual,succ:function(n,e,t,r,u){return U(e,r,n,u&&u.type?u.type:"unordered")},rand:function(n,e){var t,u,i,l,o=e&&e.type?e.type:"unordered",a=n[1],s=nn.Math.rndInt;return n=n[0],u=n-a,i=n-1,"repeated"===o||"ordered+repeated"===o?(t=1===a?[s(0,i)]:r(a,function(){return s(0,i)}),a>1&&"repeated"===o&&v(t)):"ordered"===o?(l={},t=1===a?[s(0,i)]:n===a?g(r(a,0,1)):r(a,function(){for(var e=s(0,i);1===l[e];)e=(e+1)%n;return l[e]=1,e})):(l={},t=1===a?[s(0,i)]:n===a?r(a,0,1):a>u?b(n,v(r(u,function(){for(var e=s(0,i);1===l[e];)e=(e+1)%n;return l[e]=1,e}))):v(r(a,function(){for(var e=s(0,i);1===l[e];)e=(e+1)%n;return l[e]=1,e}))),t},randu:Y.rand,rank:function(n,e,t){var r,u,i,l,o,a=nn.Arithmetic,s=a.add,f=a.sub,c=a.mul,d=a.O,_=(a.I,d),m=e[1],h=t&&t.type?t.type:"unordered",b=nn.Math.factorial;if("ordered+repeated"===h)for(l=e[0],r=0;m>r;r++)_=s(c(_,l),n[r]);else if("repeated"===h){for(l=e[0]+m-1,o=t&&t.count?t.count:b(l,m),r=1;m>=r;r++)u=l-1-n[r-1]-r+1,i=m+1-r,u>=i&&(_=s(_,b(u,i)));_=f(f(o,a.I),_)}else{if("ordered"===h){for(l=e[0],n=E(n,l),r=0;m>r;r++)_=s(c(_,l-r),n[r]);return _}for(l=e[0],o=t&&t.count?t.count:b(l,m),r=1;m>=r;r++)u=l-1-n[r-1],i=m+1-r,u>=i&&(_=s(_,b(u,i)));_=f(f(o,a.I),_)}return _},unrank:function(n,e,t){var u,i,l,o,a,s,f,c=nn.Arithmetic,d=c.O,_=c.I,m=c.sub,h=c.div,b=c.mod,p=c.mul,v=c.lte,g=c.gt,x=c.val,y=e[1],A=t&&t.type?t.type:"unordered";if(e=e[0],u=r(y),"ordered+repeated"===A)for(o=n,s=y-1;s>=0;s--)a=b(o,e),o=h(o,e),u[s]=x(a);else if("ordered"===A){for(o=n,s=y-1;s>=0;s--)l=e-s,a=b(o,l),o=h(o,l),u[s]=x(a);u=R(u,e)}else{f="repeated"===A,l=f?e+y-1:e,i=t&&t.count?t.count:nn.Math.factorial(l,y),n=m(m(i,_),n),i=h(p(i,l-y),l),a=l-y+1,o=y,s=l-1;do v(i,n)?(u[y-o]=f?l-a-y+1:l-a-o+1,g(i,d)&&(n=m(n,i),i=h(p(i,o),s)),o--,s--):(i=h(p(i,s-o),s),a--,s--);while(o>0)}return u},complement:function(n,e,t){return!0===t?g(b(e,v(n))):b(e,n)},binary:function(n,e,t){return-1===t?A(n,e):y(n,e)},pick:function(n,e,t){return e>0&&n.length?x(n,e,"ordered+repeated"!==t&&"ordered"!==t,"ordered+repeated"===t||"repeated"===t,new Array(e)):[]},choose:function(n,e){return r(e.length,function(t){return n[e[t]]})}}}),Q.conjugate=Q.complement,Q.project=Q.choose,W=nn.Powerset=nn.Subset=hn(Y,{constructor:function kn(n,e){var t=this;return t instanceof kn?(e=e||{},e.type=e.type||"subset",n=n||1,n instanceof Y&&(e.sub=n,n=e.sub.base()),e.base=n,e.dimension={from:0,to:n},void Y.call(t,"Subset",n,e)):new kn(n,e)},__static__:{C:function(n,e){return b(e,n)},P:Y.P,T:Y.T,count:function(n,e){return nn.Math.pow2(n)},initial:function(n,e,t){var u=0>n?r(e,0,1):[];return u},cascade:Y.cascade,dual:function(n,e,t,r){if(null==n)return null;var u=this,i=r&&r.order?r.order:0,l=u.C,o=u.P;u.T;return n=yn&i?pn&i?n:o(n,t):xn&i?pn&i?n.slice():o(n,t):gn&i?pn&i?o(l(n,t),t):l(n,t):pn&i?n.slice():o(n,t),r&&"binary"===r.type&&(n=y(n,t)),n},succ:Y.succ,rand:function(n,e){for(var t,u=nn.Math.rndInt,i=null,l=n-1;l>=0;l--)u(0,1)&&(i={len:i?i.len+1:1,k:l,next:i});return t=i?r(i.len,function(n){var e=i.k;return i=i.next,e}):[]},randu:Y.rand,rank:function(n,e,t){for(var r=nn.Arithmetic,u=r.O,i=r.I,l=r.add,o=r.shl,a=u,s=0,f=subset.length;f>s;)a=l(a,o(i,subset[s++]));return a},unrank:function(n,e,t){var r=this,u=nn.Arithmetic,i=u.O,l=u.J,o=u.band,a=u.shr,s=u.gt,f=[],c=0;if(!u.inside(n,l,t&&t.count?t.count:r.count(e,t)))return null;for(;s(n,i);)s(o(n,1),i)&&f.push(c),s(o(n,2),i)&&f.push(c+1),s(o(n,4),i)&&f.push(c+2),s(o(n,8),i)&&f.push(c+3),s(o(n,16),i)&&f.push(c+4),s(o(n,32),i)&&f.push(c+5),s(o(n,64),i)&&f.push(c+6),s(o(n,128),i)&&f.push(c+7),c+=8,n=a(n,8);return f},binary:function(n,e,t){return-1===t?A(n,e):y(n,e)}}}),Z=nn.Partition=hn(Y,{constructor:function Sn(n,e){var t=this;if(!(t instanceof Sn))return new Sn(n,e);e=e||{},e.type=e.type||"partition",n=n||1,n instanceof Y&&(e.sub=n,n=e.sub.base());var r=e["max="]?0|e["max="]:null,u=e["parts="]?0|e["parts="]:null,i=u?u:r?n-r+1:n,l=u?u:r?fn.ceil(n/r):1;e.base=n,e.dimension="constant"===e.length?u||n:i===l?l:{from:fn.min(l,i),to:fn.max(l,i)},Y.call(t,"Partition",n,e)},__static__:{C:function(n,e,t){return w(n,!0===t)},P:Y.P,T:Y.T,count:function(n,e){var t,r,u=nn.Arithmetic.add,i=nn.Math.partitions,l=e&&e["max="]?0|e["max="]:null,o=e&&e["parts="]?0|e["parts="]:null,a=nn.Arithmetic.O,s=l?l:0,f=l?l:1,c=o?o:1,d=o?o:n;if(0>n||o&&l&&(o+l>n+1||n>o*l)||l&&l>n||o&&o>n)return a;for(l&&!o&&(s=0,f=1,c=l,d=l),t=c;d>=t;t++)for(r=s?s:n-t+1;r>=f;r--)a=u(a,i(n,t,r));return a},initial:function(n,e,t){var u,i,l,o=t&&t["max="]?0|t["max="]:null,a=t&&t["parts="]?0|t["parts="]:null;if(0>e)return null;if(a&&o)return null;if(a&&(o=a,a=null),o){if(o>e)return null;i=fn.floor(e/o),l=e%o,u=0>n?r(i,o,0).concat(l?[l]:[]):[o].concat(r(e-o,1,0))}else u=0>n?[e]:r(e,1,0);return u},cascade:Y.cascade,dual:function(n,e,t,u){if(null==n)return null;var i=this,l=u&&u.order?u.order:0,o=u&&u["max="]?0|u["max="]:null,a=u&&u["parts="]?0|u["parts="]:null,s=i.C,f=i.P;i.T;return a&&!o&&(n=w(n)),n=yn&l?pn&l?f(n,t):n:xn&l?pn&l?f(n,t):n.slice():gn&l?pn&l?f(s(n,t),t):s(n,t):pn&l?f(n,t):n.slice(),u&&"unpacked"===u.type&&(n=I(n)),u&&"set"===u.type?O(n):(u&&"constant"===u.length&&n.lengthr||l&&i&&(l+i>r+1||r>l*i)||l&&l>r||i&&i>r?null:B(e,r,n,l,i)},rand:Y.rand,randu:Y.rand,rank:e,unrank:e,conjugate:w,sets:function(n,e){return-1===e?C(n):O(n)},pack:function(n,e){return-1===e?I(n):M(n)}}}),Z.transpose=Z.conjugate,nn}); \ No newline at end of file +!function(n,e,t){"use strict";"undefined"!=typeof Components&&"object"==typeof Components.classes&&"object"==typeof Components.classesByID&&Components.utils&&"function"==typeof Components.utils["import"]?(n.$deps=n.$deps||{})&&(n.EXPORTED_SYMBOLS=[e])&&(n[e]=n.$deps[e]=t.call(n)):"object"==typeof module&&module.exports?(module.$deps=module.$deps||{})&&(module.exports=module.$deps[e]=t.call(n)):"undefined"!=typeof System&&"function"==typeof System.register&&"function"==typeof System["import"]?System.register(e,[],function(r){r(e,t.call(n))}):"function"==typeof define&&define.amd&&"function"==typeof require&&"function"==typeof require.specified&&require.specified(e)?define(e,["module"],function(e){return t.moduleUri=e.uri,t.call(n)}):e in n||(n[e]=t.call(n)||1)&&"function"==typeof define&&define.amd&&define(function(){return n[e]})}(this,"Abacus",function(n){"use strict";function e(){throw new Error("Method not implemented!")}function t(n){if(!arguments.length||null==n)return vn;if(sn(n)){var e,t=0,r=n.toUpperCase().split(","),u=r.length;for(e=0;u>e;e++)t|=un.call(nn.ORDER,r[e])?nn.ORDER[r[e]]:0;return t>0&&!(t&(An|yn))&&(t|=vn),t&yn&&(t&=~bn),t>0?t:vn}return n&yn&&(n&=~bn),wn&n?n:vn}function r(n,e,t){n=0|n;var r,u,i,l,o,a=n>0?new Array(n):[];if(n>0&&null!=e)if(u=15&n,r=1&u,e===+e){for(t=t||0,o=e,r&&(a[0]=o,o+=t),l=r;u>l;l+=2)i=l,a[i]=o,o+=t,i+=1,a[i]=o,o+=t;for(l=u;n>l;l+=16)i=l,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t,i+=1,a[i]=o,o+=t}else if("function"==typeof e){for(r&&(a[0]=e(0)),l=r;u>l;l+=2)i=l,a[i]=e(i),i+=1,a[i]=e(i);for(l=u;n>l;l+=16)i=l,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i),i+=1,a[i]=e(i)}else{for(r&&(a[0]=e),l=r;u>l;l+=2)i=l,a[i]=e,i+=1,a[i]=e;for(l=u;n>l;l+=16)i=l,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e,i+=1,a[i]=e}return a}function u(n,e,t,r,u,i){var l,o,a=e;if(t&&an(t)){if(l=t.length,null==r&&(r=0),null==u&&(u=l-1),null==i&&(i=1),l>0)if(0>i)for(o=r;o>=u;o+=i)a=n(a,t[o],o);else for(o=r;u>=o;o+=i)a=n(a,t[o],o)}else if(i=i||1,l=(u-r)/i+1,l>0)if(0>i)for(o=r;o>=u;o+=i)a=n(a,o,o);else for(o=r;u>=o;o+=i)a=n(a,o,o);return a}function i(){var n,e,t,r,u,i,l,o,a,s,f=arguments,c=f.length;if(!c)return[];if(!0===f[0]){for(a=f[1].length,n=2;c>n;n++)a*=f[n].length;for(s=new Array(a),n=0;a>n;n++){for(o=0,i=1,t=n,e=1;c>e;e++)r=f[e].length,u=t%r,t=~~(t/r),l=f[e][u],o+=i*l,i*=r;s[n]=o}}else{for(a=f[0].length,n=1;c>n;n++)a*=f[n].length;for(s=new Array(a),n=0;a>n;n++){for(o=[],t=n,e=c-1;e>=0;e--)if(r=f[e].length,u=t%r,t=~~(t/r),l=f[e][u],an(l))for(i=l.length-1;i>=0;i--)o.unshift(l[i]);else o.unshift(l);s[n]=o}}return s}function l(n){return u(nn.Arithmetic.add,nn.Arithmetic.O,n)}function o(n){return u(nn.Arithmetic.mul,nn.Arithmetic.I,n)}function a(n){var e=nn.Arithmetic;return e.shl(e.I,e.N(n))}function s(n,e){var t=nn.Arithmetic,r=t.N;return t.pow(r(n),r(e))}function f(n,e){var t,r,i,l=nn.Arithmetic,o=l.O,a=l.I,s=l.J,c=l.N,d=l.add,_=(l.sub,l.div),m=l.mul;if(null==e)return 4>n?0>n?o:2>n?a:l.shl(c(n),n-2):(i=String(n),null==f.mem1[i]&&(f.mem1[i]=u(m,a,null,2,n)),f.mem1[i]);if(!1===e)return 3>n?2===n?a:o:(i=String(n),null==f.mem2[i]&&(f.mem2[i]=u(function(n,e){return d(1&e?s:a,m(n,e))},a,null,3,n)),f.mem2[i]);if(an(e)){if(!e.length)return 0>n?o:f(n);if(0>n)return o;if(i=String(n)+"@"+e.join(","),null==f.mem3[i]){for(t=f(e[e.length-1]),r=e.length-2;r>=0;r--)t=m(t,f(e[r]));f.mem3[i]=_(f(n),t)}return f.mem3[i]}return e===+e?0>e?-e>n?o:(i=String(n)+"@"+String(e),null==f.mem3[i]&&(f.mem3[i]=u(m,a,null,n+e+1,n)),f.mem3[i]):(e+e>n&&(e=n-e),0>e||1>n?o:0===e||1===n?a:1===e?c(n):(i=String(n)+"@"+String(e),null==f.mem3[i]&&(f.mem3[i]=_(f(n,-e),f(e))),f.mem3[i])):o}function c(n,e,t){var r,u,i,l,o=nn.Arithmetic,a=o.add,s=o.O;if(t===n&&1===e||e===n&&1===t)return o.I;if(t+e>n+1||n>e*t)return s;if(r=String(n)+","+String(e)+","+String(t),null==c.mem[r]){for(l=fn.max(1,fn.ceil((n-t)/(e-1))),i=fn.min(t,n-t-e+2),u=l;i>=u;u++)s=a(s,c(n-t,e-1,u));c.mem[r]=s}return c.mem[r]}function d(n,e){if(null==n)return null;if(!n.length)return[];var t,r=n.length,u=new Array(r);if(an(e))for(t=0;r>t;t++)u[t]=e[t]-1-n[t];else if(0>e)for(t=0;r>t;t++)u[t]=r-1-n[t];else for(e-=1,t=0;r>t;t++)u[t]=e-n[t];return u}function _(n){if(null==n)return null;for(var e=n.length-1,t=new Array(e+1),r=0;e>=r;r++)t[r]=n[e-r];return t}function m(n,e){if(null==e&&(e=0),an(n)){for(var t=n.length,r=new Array(t),u=0;t>u;u++)r[u]=e-n[u];return r}return n===+n&&e===+e?e-n:nn.Arithmetic.sub(nn.Arithmetic.N(e),n)}function h(n,e,t,r,u,i,l){null==t&&(t=0),null==r&&(r=n.length-1),null==u&&(u=0),null==i&&(i=e.length-1);var o=t>r?-1:1,a=u>i?-1:1,s=o*(r-t)+1,f=a*(i-u)+1,c=t,d=u,_=0;if(null===l&&(l=new Array(fn.min(s,f))),0===l.length)return l;for(;o*(r-c)>=0&&a*(i-d)>=0;)n[c]e[d]?d+=a:(l[_++]=n[c],c+=o,d+=a);return _u?-1:1,s=i>l?-1:1,f=a*(u-t)+1,c=t,d=t,_=0;if(!e||!e.length)return n===+n?r(n,t,a):n?n.slice():n;if(null==o&&(o=new Array(f)),n===+n){for(;a*(u-c)>=0&&s*(l-d)>=0;)c===e[d]?(c+=a,d+=a):c>e[d]?d+=s:(o[_++]=c,c+=a);for(;a*(u-c)>=0;)o[_++]=c,c+=a}else{for(;a*(u-c)>=0&&s*(l-d)>=0;)n[c]===e[d]?(c+=a,d+=a):n[c]>e[d]?d+=s:(o[_++]=n[c],c+=a);for(;a*(u-c)>=0;)o[_++]=n[c],c+=a}return _r?-1:1,c=u>i?-1:1,d=f*(r-t)+1,_=c*(i-u)+1,m=d+_,h=t,b=u,p=0,v=!l;if(null==a&&(a=new Array(m)),0===a.length)return!0===o?n:a;for(;f*(r-h)>=0&&c*(i-b)>=0;){if(l&&p){if(n[h]===s){h+=f;continue}if(e[b]===s){b+=c;continue}}n[h]e[b]?(a[p++]=s=e[b],b+=c):(a[p++]=s=n[h],v&&(a[p++]=e[b]),h+=f,b+=c)}for(;f*(r-h)>=0;)(v||n[h]!==s)&&(a[p++]=s=n[h]),h+=f;for(;c*(i-b)>=0;)(v||e[b]!==s)&&(a[p++]=s=e[b]),b+=c;if(!0===o){for(h=t,p=0;m>p;p++,h+=f)n[h]=a[p];return n}return pt?-1:1,u=r*(t-e)+1;if(1>=u)return n;for(var i,l,o=u,a=1,s=2,f=fn.min,c=new Array(u);o;){for(l=u-a,i=0;l>i;i+=s)p(n,n,e+r*i,e+r*(i+a-1),e+r*(i+a),e+r*f(i+s-1,u-1),!1,!0,c);a<<=1,s<<=1,o>>=1}return n}function g(n,e,t,r){var u,i,l,o,a=nn.Math.rndInt,s=!0===e?1:0;if(an(t))for(o=t,u=o.length;sa;a++)o[a]=n[i+c(0,d)];return t&&v(o),o}for(a=0;e>a;a++)s=c(0,--d),f=n[i+s],n[i+s]=n[i+d],n[i+d]=f,o[a]=f,u&&(u[a]=s);if(u)for(a=e-1;a>=0;a--)s=u[a],f=n[i+d],n[i+d]=n[i+s],n[i+s]=f,d++;return t&&v(o),o}function y(n,e){if(0>e)return[];var t,u=r(e,0,0),i=n.length;for(t=0;i>t;t++)u[n[t]]=1;return u}function A(n,e){e=fn.min(e||n.length,n.length);var t,r=[];for(t=0;e>t;t++)0i;i++)l=n[i],l[1]===o[i-1][0]?o[i-1][1]+=l[0]:o.push([l[1],l[0]]);else for(t=n[0],o=r(t,1,0),i=1;a>i;i++)for(u=0,l=n[i];t>u&&l>0;)o[u++]++,l--;return o}function M(n){if(null==n)return null;var e,t=[],r=n.length,u=n[0],i=[u,1];for(e=1;r>e;e++)u===n[e]?i[1]++:(t.push(i),u=n[e],i=[u,1]);return t.push(i),t}function I(n){if(null==n)return null;var e,t,r,u,i,l=[],o=n.length;for(e=0;o>e;e++)if(i=n[e],1===i[1])l.push(i[0]);else for(r=i[1],u=i[0],t=0;r>t;t++)l.push(u);return l}function O(n){if(null==n)return null;var e=0;return r(n.length,function(t){var u=n[t],i=r(u,e,1);return e+=u,i})}function C(n){return null==n?null:r(n.length,function(e){return n[e].length})}function E(n,e,t){e=e||n.length;var r,u,i,l,o,a=n.length,s=new Array(a),f=nn.Math.ceil(cn(e)),c=(1<<1+f)-1,d=new Array(c),_=1<r;r++)d[r]=0;for(u=m,r=0;a>r;r++,u+=h){for(o=n[r],l=_+o,i=0;f>i;i++)1&l&&(o-=d[l>>>1<<1]),d[l]+=1,l>>>=1;d[l]+=1,s[u]=o}return s}function R(n,e,t){e=e||n.length;var r,u,i,l,o,a,s,f,c,d,_=n.length,m=new Array(_),h=-1===t?_-1:0,b=-1===t?-1:1;for(s=nn.Math.ceil(cn(e)),f=(1<<1+s)-1,c=new Array(f),d=1<=r;r++)for(i=1,l=1<=i;i++)c[l-1+i]=1<r;r++,u+=b){for(o=n[r],a=1,i=0;s>i;i++)c[a]-=1,a<<=1,o>=c[a]&&(o-=c[a],a++);c[a]=0,m[u]=a-d}return m}function k(n,e,t){var r,u=n.length,i=null==e;if(u>1)for(i&&(e=new Array(u-1),t=0),r=u-1;r>=1;r--)e[t++]=[n[0],n[r]];else i&&(e=[]);return i?e:t}function S(n,e){var t,r,u,i,l=n.length,o=new Array(l),a=!0===e?1:0,s=new Array(l),f=0,c=0;for(t=0;l>t;t++)s[t]=0;for(u=new Array(l),i=0,r=f++,u[i++]=r,s[r]=1;l>f;){if(r=n[r],s[r])for(i>a&&(u.length=i,o[c++]=u),u=new Array(l),i=0;l>f&&s[r=f];)++f;s[r]||(u[i++]=r,s[r]=1)}return i>a&&(u.length=i,o[c++]=u),ce;e++)i=k(l[e],u,i);return it;t++)l[t]=t;for(t=0;i>t;t++)swap=r[t],u=l[r[0]],l[r[0]]=l[r[1]],l[r[1]]=u;return l}function L(n,e){var t,r,u=n.length,i=u*u,l=new Array(i);for(t=0,r=0;i>t;)l[t+r]=0,++r>=u&&(r=0,t+=u);if(!0===e)for(t=0;u>t;t++)l[u*n[t]+t]=1;else for(t=0,r=0;u>r;r++,t+=u)l[t+n[t]]=1;return l}function N(n,e){var t,r,u=n.length,i=fn.floor(fn.sqrt(u)),l=new Array(i);if(!0===e)for(t=0,r=0;i>t;)n[i*t+r]&&(l[r]=t),++r>=i&&(r=0,t++);else for(t=0,r=0;i>t;)n[t+r]&&(l[t]=r),++r>=i&&(r=0,t++);return l}function T(n){var e,t=n.length,r=new Array(t);for(e=0;t>e;e++)r[n[e]]=e;return r}function j(n){var e,t,r,u=n,i=u.length,l=i?u[0]:[],o=l.length;for(t=1;i>t;t++)for(r=l.slice(),e=0;o>e;e++)l[e]=r[u[t][e]];return l}function q(n){var e,t,r,u,i,l,o=n,a=o.length,s=0;for(r=0;a>r;r++)s+=o[r].length;for(e=new Array(s),u=0,r=0;a>r;r++){for(i=o[r],l=i.length,t=0;l>t;t++)e[u+t]=u+i[t];u+=l}return e}function X(n,e){if(e=e||n.length,e!==n.length)return!1;var t,r,u=new Array(e);for(t=0;e>t;t++)u[t]=0;for(t=0;e>t;t++){if(r=n[t],0>r||r>=e||0!==u[r])return!1;u[r]++}for(t=0;e>t;t++)if(1!==u[t])return!1;return!0}function D(n){for(var e=n.length,t=0;e>t;t++)if(n[t]!==t)return!1;return!0}function V(n){for(var e=n.length,t=1,r=n[0];e>t;t++)if(n[t]!==(r+t)%e)return!1;return!0}function J(n,e){e=e||1;var t,r=new Array(e+1);for(t=0;e>=t;t++)r[t]=n;return D(j(r))}function G(n,e,t){e=0|e;for(var r=0,u=n.length,i=0;u>i;i++)if(n[i]===i&&r++,r>e)return!1;return!0===t?r===e:!0}function H(n,e,t,r){if(n){var u,i,l,o=e,a=o.length;if(0>t)if("tuple"===r){for(u=o[0],o=o[1],i=u-1;i>=0&&n[i]<1;)i--;if(i>=0)for(n[i]--,o-=1,l=i+1;u>l;l++)n[l]=o;else n=null}else{for(i=a-1;i>=0&&n[i]<1;)i--;if(i>=0)for(n[i]--,l=i+1;a>l;l++)n[l]=o[l]-1;else n=null}else if("tuple"===r){for(u=o[0],o=o[1],i=u-1;i>=0&&n[i]+1===o;)i--;if(i>=0)for(n[i]++,l=i+1;u>l;l++)n[l]=0;else n=null}else{for(i=a-1;i>=0&&n[i]+1===o[i];)i--;if(i>=0)for(n[i]++,l=i+1;a>l;l++)n[l]=0;else n=null}return n}return null}function F(n,e,t,r){if(n){var u,i,l,o,a,s,f=e;if(0>t)if("cyclic"===r)n=n[0]>0?[n[f-1]].concat(n.slice(0,-1)):null;else do{for(s=!1,u=f-2;u>=0&&n[u]=0){for(i=f-1;i>u&&n[u]l;)a=n[l],n[l]=n[o],n[o]=a,s=s||l===n[l]||o===n[o],l++,o--;if(s=s||u===n[u]||o===n[o],"derangement"===r){if(!s)for(l=u-1;l>=0;l--)if(l===n[l]){s=!0;break}}else s=!1}else n=null}while(n&&s);else if("cyclic"===r)n=n[0]+1=0&&n[u]>n[u+1];)u--;if(u>=0){for(i=f-1;i>u&&n[u]>n[i];)i--;for(a=n[u],n[u]=n[i],n[i]=a,l=u+1,o=f-1;o>l;)a=n[l],n[l]=n[o],n[o]=a,s=s||l===n[l]||o===n[o],l++,o--;if(s=s||u===n[u]||o===n[o],"derangement"===r){if(!s)for(l=u-1;l>=0;l--)if(l===n[l]){s=!0;break}}else s=!1}else n=null}while(n&&s);return n}return null}function U(n,e,t,r){if(n){var u,i,l,o,a,s,f,c=e[1],d=e[0];if(0>t)if("ordered+repeated"===r){for(i=c-1;i>=0&&n[i]<1;)i--;if(i>=0)for(n[i]--,d-=1,l=i+1;c>l;l++)n[l]=d;else n=null}else if("ordered"===r){for(u={},i=0;c>i;i++)u[n[i]]=i;for(i=c-1,o=-1;-1===o&&i>=0;){if(n[i]-1>=0)for(l=n[i]-1;l>=0;l--)if(null==u[l]){o=i,u[l]=o;break}u[n[i]]=null,i--}if(o>-1)for(n[o]=l,l=d-1,i=o+1;c>i;i++){for(;l>=0&&null!=u[l];)l--;n[i]=l,u[l]=i}else n=null}else{for(f="repeated"===r?0:1,i=c-1,o=-1;i>0;){if(n[i]>n[i-1]+f){o=i;break}i--}if(-1===o&&0-1){for(s=d-1+f,i=c-1;i>o;i--)s-=f,n[i]=s;n[o]--}else n=null}else if("ordered+repeated"===r){for(i=c-1;i>=0&&n[i]+1===d;)i--;if(i>=0)for(n[i]++,l=i+1;c>l;l++)n[l]=0;else n=null}else if("ordered"===r){for(u={},i=0;c>i;i++)u[n[i]]=i;for(i=c-1,o=-1;-1===o&&i>=0;){if(n[i]+1l;l++)if(null==u[l]){o=i,u[l]=o;break}u[n[i]]=null,i--}if(o>-1)for(n[o]=l,l=0,i=o+1;c>i;i++){for(;d>l&&null!=u[l];)l++;n[i]=l,u[l]=i}else n=null}else{if(i=c-1,o=-1,"repeated"===r)for(f=0;i>=0;){if(n[i]+1=0;){if(n[i]-1)for(s=n[o]+1-f,i=o;c>i;i++)s+=f,n[i]=s;else n=null}return n}return null}function B(n,e,t,u,i){if(u&&i)return null;if(n){var l,o,a,s,f,c,d=e;if(0>t)if(u&&(i=u,u=null),o=i?1:0,n.length>o&&n[o]>1){for(l=n.length-1,c=0;l>=o&&1===n[l];)c+=n[l],l--;f=n[l]-1,c++,n[l]=f,n=n.slice(0,l+1),c>f?n=n.concat(r(fn.floor(c/f),f),(c%=f)?[c]:[]):c>0&&(n=n.concat([c]))}else n=null;else if(u&&(i=u,u=null),o=i?1:0,a=i?n.length-1:0,f=i?d%i||i:d,n.length>o&&n[a]1?(l=s-2,c=n[s-1]):(l=s-1,c=0);l>o&&n[l]===n[l-1];)c+=n[l],l--;n[l]++,c--,n=c>0?n.slice(0,l+1).concat(r(c,1)):n.slice(0,l+1)}else n=null;return n}return null}var Y,z,K,Q,W,Z,nn={VERSION:"0.7.0"},en="prototype",tn="constructor",rn=Array.prototype.slice,un=Object[en].hasOwnProperty,ln=Object[en].toString,on=/^\s+|\s+$/g,an=(String.prototype.trim?function(n){return n.trim()}:function(n){return n.replace(on,"")},function(n){return n instanceof Array||"[object Array]"===ln.call(n)}),sn=function(n){return n instanceof String||"[object String]"===ln.call(n)},fn=Math,cn=fn.log2||function(n){return fn.log(n)/fn.LN2},dn=function(n){var e=n.toString(2),t=32-e.length;return t>0?new Array(t+1).join("0")+e:e},_n=Object.create,mn=function(n,e){for(var t in e)un.call(e,t)&&(n[t]=e[t]);return n},hn=function(n,e){1===arguments.length&&(e=n,n=Object);var t=e[tn];return un.call(e,"__static__")&&(t=mn(t,e.__static__),delete e.__static__),t[en]=mn(_n(n[en]),e),t},bn=1,pn=2,vn=4,gn=8,xn=16,yn=32,An=vn|gn|xn,wn=An|yn|bn|pn;return f.mem1={},f.mem2={},f.mem3={},c.mem={},nn.$={MAXMEM:1e6,RANDOM:"index"},nn.ORDER={LEX:vn,LEXICOGRAPHIC:vn,REVLEX:vn|bn,ANTILEX:vn|bn,REVERSELEXICOGRAPHIC:vn|bn,ANTILEXICOGRAPHIC:vn|bn,REFLEX:vn|pn,REFLECTEDLEXICOGRAPHIC:vn|pn,COLEX:gn,COLEXICOGRAPHIC:gn,REVCOLEX:gn|bn,ANTICOLEX:gn|bn,REVERSECOLEXICOGRAPHIC:gn|bn,ANTICOLEXICOGRAPHIC:gn|bn,REFCOLEX:gn|pn,REFLECTEDCOLEXICOGRAPHIC:gn|pn,REV:bn,REVERSE:bn,REVERSED:bn,REF:pn,REFLECT:pn,REFLECTED:pn,RANDOM:yn,GRAY:xn,MINIMAL:xn},nn.Util={array:r,operate:u,intersect:h,difference:b,merge:p,conjugation:d,parity:_,inversion:m,mergesort:v,shuffle:g,pick:x},nn.Math={O:0,I:1,J:-1,N:function(n){return nn.Arithmetic.add(nn.Arithmetic.O,n)},V:function(n){return nn.Arithmetic.sub(nn.Arithmetic.O,n)},rnd:fn.random,rndInt:function(n,e){return nn.Math.round((e-n)*nn.Math.rnd()+n)},equ:function(n,e){return n===e},gte:function(n,e){return n>=e},lte:function(n,e){return e>=n},gt:function(n,e){return n>e},lt:function(n,e){return e>n},inside:function(n,e,t,r){return r?n>=e&&t>=n:n>e&&t>n},clamp:function(n,e,t){return e>n?e:n>t?t:n},wrap:function(n,e,t){return e>n?t:n>t?e:n},wrapR:function(n,e){return 0>n?n+e:n},add:function(n,e){return n+e},sub:function(n,e){return n-e},mul:function(n,e){return n*e},div:function(n,e){return nn.Math.floor(n/e)},mod:function(n,e){return n%e},pow:fn.pow,shl:function(n,e){return n<>e},bor:function(n,e){return n|e},band:function(n,e){return n&e},xor:function(n,e){return n^e},abs:fn.abs,min:fn.min,max:fn.max,floor:fn.floor,ceil:fn.ceil,round:fn.round,num:function(n){return"number"==typeof n?nn.Math.floor(n):parseInt(n,10)},val:function(n){return nn.Math.floor(n.valueOf())},sum:l,product:o,pow2:a,exp:s,factorial:f,partitions:c},nn.Arithmetic={O:0,I:1,J:-1,N:nn.Math.N,V:nn.Math.V,equ:nn.Math.equ,gte:nn.Math.gte,lte:nn.Math.lte,gt:nn.Math.gt,lt:nn.Math.lt,inside:nn.Math.inside,clamp:nn.Math.clamp,wrap:nn.Math.wrap,wrapR:nn.Math.wrapR,add:nn.Math.add,sub:nn.Math.sub,mul:nn.Math.mul,div:nn.Math.div,mod:nn.Math.mod,pow:nn.Math.pow,shl:nn.Math.shl,shr:nn.Math.shr,bor:nn.Math.bor,band:nn.Math.band,xor:nn.Math.xor,abs:nn.Math.abs,min:nn.Math.min,max:nn.Math.max,floor:nn.Math.floor,ceil:nn.Math.ceil,round:nn.Math.round,rnd:nn.Math.rndInt,num:nn.Math.num,val:nn.Math.val},nn.Class=hn,nn.BitArray=hn({constructor:function Mn(n){var e=this;return e instanceof Mn?(e.length=n,void(e.bits=new Uint32Array(nn.Math.ceil(n/32)))):new Mn(n)},length:0,bits:null,dispose:function(){var n=this;return n.length=null,n.bits=null,n},clone:function(){var n=this,e=new nn.BitArray(n.length);return e.bits=new Uint32Array(n.bits),e},fromArray:function(n){var e=this;return e.bits=new Uint32Array(n),e},toArray:function(){return rn.call(this.bits)},toString:function(){var n,e,t=this.toArray();for(n=0,e=t.length;e>n;n++)t[n]=dn(t[n]);return t.join("")},reset:function(){var n,e=this,t=e.bits,r=t.length;for(n=0;r>n;n++)t[n]=0;return e},isset:function(n){return!!(this.bits[n>>>5]&1<<(31&n))},set:function(n){var e=this;return e.bits[n>>>5]|=1<<(31&n),e},unset:function(n){var e=this;return e.bits[n>>>5]&=~(1<<(31&n)),e},toggle:function(n){var e=this;return e.bits[n>>>5]^=1<<(31&n),e}}),Y=nn.CombinatorialIterator=hn({constructor:function In(n,e,t){var r=this,u=r[tn];r.name=n||"CombinatorialIterator",r.n=e||0,r.$=t=t||{},t.type=String(t.type||"default").toLowerCase(),t.order=t.order||vn,t.base=t.base||0,t.dimension=t.dimension||0,t.rand=t.rand||{},t.count=u.count(r.n,r.$),t.sub instanceof In&&(t.subcount=nn.Arithmetic.mul(t.count,t.sub.total()),t.submethod=String(t.submethod||"project").toLowerCase(),t.subcascade=-1===t.subcascade?-1:1,"concatenate"===t.submethod?t.dimension=t.dimension+t.sub.dimension():"compose"===t.submethod&&(t.dimension=t.dimension*t.sub.dimension())),r.order(t.order)},__static__:{Iterable:function On(n,e){var t=this;return t instanceof On?(e=-1===e?-1:1,void(t.next=function(){return n.hasNext(e)?{value:n.next(e)}:{done:!0}})):new On(n)},C:function(n,e){return d(n,e)},P:function(n,e){return _(n)},T:function(n,e){return m(n,e)},count:e,initial:e,cascade:function(n,e,t,u){if(-1===u){var l=n;n=e,e=l}return"concatenate"===t?n&&e?n.concat(e):n||e||null:"compose"===t?n&&e?i(!0,n,e):n||e||null:null==n||null==e?null:r(n.length,function(t){return n[t]n?l.J:l.I),r,u)},rand:function(n,e){var t=this,r=nn.Arithmetic,u=r.sub(e&&e.count?e.count:t.count(n,e),r.I),i=r.O,l=r.rnd(i,u);return r.equ(i,l)?t.initial(1,n,e):r.equ(u,l)?t.initial(-1,n,e):t.unrank(l,n,e)},rank:e,unrank:e},name:"CombinatorialIterator",n:0,$:null,__index:null,_index:null,__item:null,_item:null,__subindex:null,_subindex:null,__subitem:null,_subitem:null,_prev:null,_next:null,_traversed:null,dispose:function(n){var e=this;return!0!==n&&e.$.sub&&(e.$.sub.dispose(),e.$.sub=null),e.name=null,e.n=null,e.$=null,e.__index=null,e._index=null,e.__item=null,e._item=null,e.__subindex=null,e._subindex=null,e.__subitem=null,e._subitem=null,e._prev=null,e._next=null,e._traversed&&(e._traversed.dispose(),e._traversed=null),e},base:function(){return this.$.base||0},dimension:function(){return this.$.dimension||0},total:function(n){var e=this.$;return e.sub&&!0!==n?e.subcount||e.count||0:e.count||0},_init:function(n,e){var t,r,u,i=this,l=i[tn],o=i.$,a=i.n,s=nn.Arithmetic,f=s.O,c=s.I,d=o.order;return i.__index=i._index=f,i._item=i.__item=null,i._prev=!1,i._next=!1,r=o.count,u=s.sub(r,c),yn&d?"gen"===nn.$.RANDOM||1===o.rand[o.type]||s.gt(r,nn.$.MAXMEM)?(i.__item=l.rand(a,o),i.__index=null):(i._traversed&&i._traversed.dispose(),i._traversed=new nn.BitArray(s.val(r)),t=i.random("index"),i._traversed.set(+t),i.__item=l.unrank(t,a,o),null!=i.__item&&(i.__index=t)):gn&d?(i.__item=l.initial(-n,a,o),null!=i.__item&&(i.__index=-1===n?f:u)):(i.__item=l.initial(n,a,o),null!=i.__item&&(i.__index=-1===n?u:f)),i._item=null==i.__item?null:l.dual(i.__item,i.__index,a,o),i._index=!e||yn&d?f:u,null===i.__index&&(i.__index=f),i._prev=yn&d||!e?!1:null!=i.__item,i._next=!e||yn&d?null!=i.__item:!1,i},order:function(n,e){if(!arguments.length)return this._order;var r,u,i,l,o,a=this,s=a[tn],f=nn.Arithmetic,c=(f.O,f.I,!0===n);return e=-1===e,i=a.n,l=a.$,a._traversed&&(a._traversed.dispose(),a._traversed=null),c?n=l.order:sn(n)&&-1<(u=n.indexOf("|"))?(r=n.substr(u+1),n=t(n.substr(0,u))):r=n=t(n),o=bn&n?-1:1,o=e?-o:o,l.order=n,l.sub?(c?l.sub.rewind(e?-1:1):l.sub.order(r,e?-1:1),a.__subindex=l.sub.index(),a.__subitem=l.sub.next(e?-1:1),a._subindex=null,a._subitem=null):(a.__subindex=null,a.__subitem=null,a._subindex=null,a._subitem=null),a._init(o,e),l.sub&&(a._prev=a._prev&&null!=a.__subitem,a._next=a._next&&null!=a.__subitem,a._subindex=f.add(f.mul(a._index,l.sub.total()),a.__subindex),a._subitem=s.cascade(a._item,a.__subitem,l.submethod,l.subcascade)),a},index:function(n,e){if(e=!0===e,!arguments.length)return this.$.sub?this._subindex:this._index;var t,r=this,u=r[tn],i=nn.Arithmetic,l=i.O,o=i.I,a=i.J,s=r.n,f=r.$,c=f.sub&&!e?f.subcount:f.count,d=f.sub&&!e?r._subindex:r._index,_=f.order,m=bn&_?-1:1;return n=i.wrapR(i.N(n),c),!i.equ(n,d)&&i.inside(n,a,c)&&(f.sub&&!e&&(f.sub.index(i.mod(n,f.sub.total())),r.__subindex=f.sub.index(),r.__subitem=f.sub.item(),n=i.div(n,f.sub.total()),c=f.count),t=i.sub(c,o),gn&_?(r.__index=-1===m?n:i.sub(t,n),r._index=n,r.__item=i.equ(l,n)?u.initial(-m,s,f):i.equ(t,n)?u.initial(m,s,f):u.unrank(r.__index,s,f),r._item=u.dual(r.__item,r.__index,s,f),r._prev=null!=r.__item,r._next=null!=r.__item):yn&_||(r.__index=-1===m?i.sub(t,n):n,r._index=n,r.__item=i.equ(l,n)?u.initial(m,s,f):i.equ(t,n)?u.initial(-m,s,f):u.unrank(r.__index,s,f),r._item=u.dual(r.__item,r.__index,s,f),r._prev=null!=r.__item,r._next=null!=r.__item),f.sub&&(r._prev=r._prev&&null!=r.__subitem,r._next=r._next&&null!=r.__subitem,r._subindex=i.add(i.mul(r._index,f.sub.total()),r.__subindex),r._subitem=u.cascade(r._item,r.__subitem,f.submethod,f.subcascade))),r},item:function(n,e){if(!arguments.length)return this.$.sub?this._subitem:this._item;var r,u,i,l,o,a,s,f=this,c=f[tn],d=f.n,_=f.$,m=_.sub?_.subcount:_.count,h=_.sub?f._subindex:f._index,b=nn.Arithmetic,p=b.O,v=b.I,g=b.J,x=null;return sn(e)?-1<(s=e.indexOf("|"))?(x=e.substr(s+1),e=t(e.substr(0,s))):x=e=t(e):null!=e?x=e=t(e):(e=_.order,x=null),_.sub||(x=null),an(n)?(m=_.count,i=bn&e?-1:1,r=b.sub(m,v),f.__item=n.slice(),f.__index=c.rank(f.__item,d,_),yn&e?(f._index=f.__index,l=_.order,_.order=e,f._item=c.dual(f.__item,f.__index,d,_),_.order=l):gn&e?(f._index=-1===i?f.__index:b.sub(r,f.__index),l=_.order,_.order=e,f._item=c.dual(f.__item,f.__index,d,_),_.order=l):(f._index=-1===i?b.sub(r,f.__index):f.__index,l=_.order,_.order=e,f._item=c.dual(f.__item,f.__index,d,_),_.order=l),f):(n=b.wrapR(b.N(n),m),e===_.order&&null===x&&b.equ(n,h)?_.sub?f._subitem:f._item:b.inside(n,g,m)?(a=null,_.sub&&(a=_.sub.item(b.mod(n,_.sub.total()),x),n=b.div(n,_.sub.total()),m=_.count),i=bn&e?-1:1,r=b.sub(m,v),yn&e?(u=null,l=_.order,_.order=e,o=c.dual(c.rand(d,_),u,d,_),_.order=l,_.sub&&(o=c.cascade(o,a,_.submethod,_.subcascade)),o):gn&e?(u=-1===i?n:b.sub(r,n),l=_.order,_.order=e,o=c.dual(b.equ(p,n)?c.initial(-i,d,_):b.equ(r,n)?c.initial(i,d,_):c.unrank(u,d,_),u,d,_),_.order=l,_.sub&&(o=c.cascade(o,a,_.submethod,_.subcascade)),o):(u=-1===i?b.sub(r,n):n,l=_.order,_.order=e,o=c.dual(b.equ(p,n)?c.initial(i,d,_):b.equ(r,n)?c.initial(-i,d,_):c.unrank(u,d,_),u,d,_),_.order=l,_.sub&&(o=c.cascade(o,a,_.submethod,_.subcascade)),o)):null)},random:function(n,e,t,r){var u,i=this,l=i[tn],o=i.$,a=o.order;if(r=!0===r,"index"===n){var s,f=nn.Arithmetic,c=f.N,d=f.O,_=f.I;return e===!!e&&(r=e,e=null,t=null),s=o.sub&&!r?o.subcount:o.count,null==e&&null==t?(e=d,t=f.sub(s,_)):null==t?(e=c(e||0),t=f.sub(s,_)):(e=c(e),t=c(t)),f.rnd(e,t)}return o.order|=yn,u=l.rand(i.n,o),o.order=a,u=l.dual(u,null,i.n,o),o.sub&&!r?l.cascade(u,o.sub.random(),o.submethod,o.subcascade):u},rewind:function(n){var e=this;return e.order(!0,-1===n?-1:1)},hasNext:function(n){var e=this;return-1===n?yn&e.$.order?!1:e._prev:e._next},next:function(n){var e,t,r,u,i,l=this,o=l[tn],a=nn.Arithmetic,s=a.O,f=a.I,c=a.J,d=l.n,_=l.$,m=_.order,h=_.count,b=_.sub?l._subitem:l._item;if(r=-1===n,n=bn&m?-1:1,r)return yn&m?null:(gn&m?(l.__item=o.succ(n,l.__item,l.__index,d,_),null!=l.__item&&(l.__index=a.add(l.__index,0>n?c:f))):(l.__item=o.succ(-n,l.__item,l.__index,d,_),null!=l.__item&&(l.__index=a.add(l.__index,n>0?c:f))),l._prev=null!=l.__item,l._prev?l._index=a.sub(l._index,f):_.sub&&_.sub.hasNext(-1)?(l.__subindex=_.sub.index(),l.__subitem=_.sub.next(-1),l._init(-n,r)):(l.__subindex=null,l.__subitem=null),l._item=null==l.__item?null:o.dual(l.__item,l.__index,d,_),_.sub&&(l._prev=l._prev&&null!=l.__subitem,l._subindex=l._prev?a.add(a.mul(l._index,_.sub.total()),l.__subindex):null,l._subitem=l._prev?o.cascade(l._item,l.__subitem,_.submethod,_.subcascade):null),b);if(yn&m)if(u=a.sub(h,f),a.lt(l._index,u))if(e=l._traversed){for(t=l.random("index"),i=nn.Math.rnd()>.5?c:f;e.isset(+t);)t=a.wrap(a.add(t,i),s,u);e.set(+t),l.__item=o.unrank(t,d,_),null!=l.__item&&(l.__index=t)}else l.__item=o.rand(d,_),l.__index=null;else l._item=l.__item=null,l._traversed&&(l._traversed.dispose(),l._traversed=null);else gn&m?(l.__item=o.succ(-n,l.__item,l.__index,d,_),null!=l.__item&&(l.__index=a.add(l.__index,n>0?c:f))):(l.__item=o.succ(n,l.__item,l.__index,d,_),null!=l.__item&&(l.__index=a.add(l.__index,0>n?c:f)));return l._next=null!=l.__item,l._next?(l._index=a.add(l._index,f),null===l.__index&&(l.__index=l._index)):_.sub&&_.sub.hasNext()?(l.__subindex=_.sub.index(),l.__subitem=_.sub.next(),l._init(n,r)):(l.__subindex=null,l.__subitem=null),l._item=null==l.__item?null:o.dual(l.__item,l.__index,d,_),_.sub&&(l._next=l._next&&null!=l.__subitem,l._subindex=l._next?a.add(a.mul(l._index,_.sub.total()),l.__subindex):null,l._subitem=l._next?o.cascade(l._item,l.__subitem,_.submethod,_.subcascade):null),b},range:function(n,e){var t,r,u,i,l,o=this,a=nn.Arithmetic,s=a.N,f=a.O,c=a.I,d=o.$,_=d.sub?d.subcount:d.count,m=1,h=arguments.length,b=a.sub(_,c),p=!(yn&d.order);if(1>h?(n=f,e=b):2>h?(n=s(n),e=b):(n=s(n),e=s(e)),n=a.wrapR(n,_),e=a.wrapR(e,_),a.gt(n,e)&&(t=n,n=e,e=t,m=-1),n=a.clamp(n,f,b),p&&(e=a.clamp(e,f,b)),a.lte(n,e)){if(l=[o.$.order,o.__index,o._index,o.__item&&o.__item.slice(),o._item&&o._item.slice(),o.__subindex,o._subindex,o.__subitem&&o.__subitem.slice(),o._subitem&&o._subitem.slice(),o._prev,o._next],p&&o.index(n),u=a.val(a.sub(e,n)),r=new Array(u+1),0>m)for(i=u;i>=0;i--)r[i]=o.next();else for(i=0;u>=i;i++)r[i]=o.next();o.$.order=l[0],o.__index=l[1],o._index=l[2],o.__item=l[3],o._item=l[4],o.__subindex=l[5],o._subindex=l[6],o.__subitem=l[7],o._subitem=l[8],o._prev=l[9],o._next=l[10]}else r=[];return r},__iter__:function(){return new Y.Iterable(this)}}),"undefined"!=typeof Symbol&&"undefined"!=typeof Symbol.iterator&&(Y[en][Symbol.iterator]=Y[en].__iter__),z=nn.Tensor=hn(Y,{constructor:function Cn(){var n,e=this,t=rn.call(arguments);return n=!t.length||t[t.length-1]instanceof Y||an(t[t.length-1])||t[t.length-1]===+t[t.length-1]?{}:t.pop()||{},n.type=String(n.type||"tensor").toLowerCase(),n.order=n.order||vn,t.length&&an(t[0])&&(t=t[0]),t&&t.length||(t=[]),e instanceof Cn?("tuple"===n.type?(t[0]=t[0]||1,t[1]=t[1]||1,t[0]instanceof Y?(n.sub=t[0],t[0]=n.sub.dimension()):t[1]instanceof Y&&(n.sub=t[1],t[1]=n.sub.base()),n.base=t[1],n.dimension=t[0]):(n.base=u(function(n,e){return e>n?e:n},0,t),n.dimension=t.length),void Y.call(e,"Tensor",t,n)):new Cn(t,n)},__static__:{C:function(n,e){return d(n,e[1])},P:Y.P,T:Y.T,count:function(n,e){return e&&"tuple"===e.type?n&&n[0]?nn.Math.exp(n[0],n[1]):0:n&&n.length?nn.Math.product(n):0},initial:function(n,e,t){var u=t&&"tuple"===t.type?e[0]?0>n?r(e[0],e[1]-1,0):r(e[0],0,0):[]:e.length?0>n?r(e.length,function(n){return e[n]-1}):r(e.length,0,0):[];return u},cascade:Y.cascade,dual:function(n,e,t,r){if(null==n)return null;var u=this,i=r&&r.order?r.order:0,l=r&&"tuple"===r.type?u.C:Y.C,o=u.P;u.T;return yn&i?pn&i?o(n,t):n.slice():xn&i?pn&i?o(n,t):n.slice():gn&i?pn&i?l(n,t):o(l(n,t),t):pn&i?o(n,t):n.slice()},succ:function(n,e,t,r,u){return H(e,r,n,u&&u.type?u.type:"tensor")},rand:function(n,e){var t,u=nn.Math.rndInt;return t=e&&"tuple"===e.type?n[0]?r(n[0],function(e){return u(0,n[1]-1)}):[]:n.length?r(n.length,function(e){return u(0,n[e]-1)}):[]},randu:Y.rand,rank:function(n,e,t){var r,u,i,l=nn.Arithmetic,o=l.add,a=l.mul,r=l.O,s=l.J;if(t&&"tuple"===t.type){if(u=e[0],!u)return s;for(e=e[1],i=0;u>i;i++)r=o(a(r,e),n[i])}else{if(u=e.length,!u)return s;for(i=0;u>i;i++)r=o(a(r,e[i]),n[i])}return r},unrank:function(n,e,t){var r,u,i,l,o,a,s=nn.Arithmetic,f=s.mod,c=s.div,d=s.val;if(t&&"tuple"===t.type){if(a=e[0],!a)return[];for(o=new Array(a),u=e[1],r=n,i=a-1;i>=0;i--)l=f(r,u),r=c(r,u),o[i]=d(l)}else{if(a=e.length,!a)return[];for(o=new Array(a),r=n,i=a-1;i>=0;i--)u=e[i],l=f(r,u),r=c(r,u),o[i]=d(l)}return o},product:i,component:function(n,e){var t,r,u,i,l,o,a=[],s=e,f=s.length;for(t=0;f>t;t++)if(u=s[t],l=n[t],i=u[l],i instanceof Array)for(r=0,o=i.length;o>r;r++)a.push(i[r]);else a.push(i);return a}}}),K=nn.Permutation=hn(Y,{constructor:function En(n,e){var t=this;return t instanceof En?(e=e||{},e.type=e.type||"permutation",n=n||1,n instanceof Y&&(e.sub=n,n=e.sub.dimension()),e.base=e.dimension=n,e.rand={derangement:1,involution:1},void Y.call(t,"Permutation",n,e)):new En(n,e)},__static__:{C:function(n,e){return d(n,-1)},P:Y.P,T:Y.T,count:function(n,e){var t=e&&e.type?e.type:"permutation";return"cyclic"===t?nn.Arithmetic.N(n):nn.Math.factorial(n,"derangement"===t?!1:null)},initial:function(n,e,t){var u,i=t&&t.type?t.type:"permutation";if("cyclic"===i)u=0>n?[e-1].concat(r(e-1,0,1)):r(e,0,1);else if("derangement"===i){if(2>e)return null;if(1&e){var l=fn.floor(e/2);u=0>n?r(e-l-1,e-1,-1).concat([l-1,l]).concat(r(l-1,l-2,-1)):r(e-3,function(n){return 1&n?n-1:n+1}).concat([e-2,e-1,e-3])}else u=0>n?r(e,e-1,-1):r(e,function(n){return 1&n?n-1:n+1})}else u=0>n?r(e,e-1,-1):r(e,0,1);return u},cascade:Y.cascade,dual:Y.dual,succ:function(n,e,t,r,u){var i=u&&u.type?u.type:"permutation";return"involution"===i||"multiset"===i?null:F(e,r,n,i)},rand:function(n,t){var u=nn.Math.rndInt,i=t&&t.type?t.type:"permutation";if("cyclic"===i){var l=u(0,n-1);return l>0?r(n-l,l,1).concat(r(l,0,1)):r(n,0,1)}if("derangement"===i){var o,a,s,f=!1,c=new Array(n);do{for(o=0;n>o;o++)c[o]=o;for(o=n-1,f=!1;o>=0;){if(s=u(0,o),c[s]===o){f=!0;break}a=c[o],c[o]=c[s],c[s]=a,o--}f=f||0===c[0]}while(f);return c}return"involution"===i||"multiset"===i?e():g(r(n,0,1))},randu:Y.rand,rank:function(n,t,r){var u,i,l=nn.Arithmetic,o=r&&r.type?r.type:"permutation",a=l.add,s=l.mul,f=l.O;if(t=t||n.length,!t)return l.J;if("cyclic"===o)return n[0];if("derangement"===o)return e();if("involution"===o||"multiset"===o)return e(); +for(n=E(n),i=t-1,u=0;i>u;u++)f=a(s(f,t-u),n[u]);return f},unrank:function(n,t,u){var i,l,o,a,s,f=nn.Arithmetic,c=u&&u.type?u.type:"permutation",d=f.mod,_=f.div,m=f.val;if(!t)return[];if("cyclic"===c)return n=m(n),r(t,function(e){return(n+e)%t});if("derangement"===c)return e();if("involution"===c||"multiset"===c)return e();for(i=r(t),i[t-1]=0,l=n,o=t-2;o>=0;o--)a=t-o,s=d(l,a),l=_(l,a),i[o]=m(s);return R(i)},permute:function(n,e,t){var u,i,l,o=n.length;for(!0===t?(i=r(o),l=n):(i=n,l=n.slice()),u=0;o>u;u++)i[u]=l[e[u]];return i},shuffle:function(n,e){if(!0===e){var t=n.length,r=nn.Math.rndInt(0,t-1);return r>0&&n.push.apply(n,n.splice(0,r)),n}return g(n)},compose:function(){return j(rn.call(arguments))},concatenate:function(){return q(rn.call(arguments))},inverse:function(n){return T(n)},cycles:function(n,e){return-1===e?cycles2permutation(n):S(n)},swaps:function(n,e){return-1===e?P(n):$(n)},inversion:function(n,e){return-1===e?R(n):E(n)},matrix:function(n,e,t){return-1===t?N(n,e):L(n,e)},parity:e,is_permutation:X,is_identity:D,is_cyclic:V,is_derangement:G,is_involution:function(n){return J(n,1)},is_kthroot:function(n,e){return e>1?J(n,e-1):!1},is_connected:function(n){var e,t=n.length,r=-1;for(e=0;t-1>e;e++)if(n[e]>r&&(r=n[e]),e>=r)return!1;return!0}}}),Q=nn.Combination=hn(Y,{constructor:function Rn(n,e,t){var r=this;if(!(r instanceof Rn))return new Rn(n,e,t);if(an(n)?(t=e||{},e=n[1]||1,n=n[0]||1):(t=t||{},n=n||1,e=e||1),t.type=String(t.type||"unordered").toLowerCase(),-1n?r(e[1],e[0]-1,0):r(e[1],0,0):"ordered"===u?0>n?r(e[1],e[0]-1,-1):r(e[1],0,1):0>n?r(e[1],e[0]-e[1],1):r(e[1],0,1);return i},cascade:Y.cascade,dual:function(n,e,t,r){return n=Y.dual.call(this,n,e,t,r),r&&"binary"===r.type&&(n=y(n,t[0])),n},succ:function(n,e,t,r,u){return U(e,r,n,u&&u.type?u.type:"unordered")},rand:function(n,e){var t,u,i,l,o=e&&e.type?e.type:"unordered",a=n[1],s=nn.Math.rndInt;return n=n[0],u=n-a,i=n-1,"repeated"===o||"ordered+repeated"===o?(t=1===a?[s(0,i)]:r(a,function(){return s(0,i)}),a>1&&"repeated"===o&&v(t)):"ordered"===o?(l={},t=1===a?[s(0,i)]:n===a?g(r(a,0,1)):r(a,function(){for(var e=s(0,i);1===l[e];)e=(e+1)%n;return l[e]=1,e})):(l={},t=1===a?[s(0,i)]:n===a?r(a,0,1):a>u?b(n,v(r(u,function(){for(var e=s(0,i);1===l[e];)e=(e+1)%n;return l[e]=1,e}))):v(r(a,function(){for(var e=s(0,i);1===l[e];)e=(e+1)%n;return l[e]=1,e}))),t},randu:Y.rand,rank:function(n,e,t){var r,u,i,l,o,a=nn.Arithmetic,s=a.add,f=a.sub,c=a.mul,d=a.O,_=(a.I,d),m=e[1],h=t&&t.type?t.type:"unordered",b=nn.Math.factorial;if("ordered+repeated"===h)for(l=e[0],r=0;m>r;r++)_=s(c(_,l),n[r]);else if("repeated"===h){for(l=e[0]+m-1,o=t&&t.count?t.count:b(l,m),r=1;m>=r;r++)u=l-1-n[r-1]-r+1,i=m+1-r,u>=i&&(_=s(_,b(u,i)));_=f(f(o,a.I),_)}else{if("ordered"===h){for(l=e[0],n=E(n,l),r=0;m>r;r++)_=s(c(_,l-r),n[r]);return _}for(l=e[0],o=t&&t.count?t.count:b(l,m),r=1;m>=r;r++)u=l-1-n[r-1],i=m+1-r,u>=i&&(_=s(_,b(u,i)));_=f(f(o,a.I),_)}return _},unrank:function(n,e,t){var u,i,l,o,a,s,f,c=nn.Arithmetic,d=c.O,_=c.I,m=c.sub,h=c.div,b=c.mod,p=c.mul,v=c.lte,g=c.gt,x=c.val,y=e[1],A=t&&t.type?t.type:"unordered";if(e=e[0],u=r(y),"ordered+repeated"===A)for(o=n,s=y-1;s>=0;s--)a=b(o,e),o=h(o,e),u[s]=x(a);else if("ordered"===A){for(o=n,s=y-1;s>=0;s--)l=e-s,a=b(o,l),o=h(o,l),u[s]=x(a);u=R(u,e)}else{f="repeated"===A,l=f?e+y-1:e,i=t&&t.count?t.count:nn.Math.factorial(l,y),n=m(m(i,_),n),i=h(p(i,l-y),l),a=l-y+1,o=y,s=l-1;do v(i,n)?(u[y-o]=f?l-a-y+1:l-a-o+1,g(i,d)&&(n=m(n,i),i=h(p(i,o),s)),o--,s--):(i=h(p(i,s-o),s),a--,s--);while(o>0)}return u},complement:function(n,e,t){return!0===t?g(b(e,v(n))):b(e,n)},binary:function(n,e,t){return-1===t?A(n,e):y(n,e)},pick:function(n,e,t){return e>0&&n.length?x(n,e,"ordered+repeated"!==t&&"ordered"!==t,"ordered+repeated"===t||"repeated"===t,new Array(e)):[]},choose:function(n,e){return r(e.length,function(t){return n[e[t]]})}}}),Q.conjugate=Q.complement,Q.project=Q.choose,W=nn.Powerset=nn.Subset=hn(Y,{constructor:function kn(n,e){var t=this;return t instanceof kn?(e=e||{},e.type=e.type||"subset",n=n||1,n instanceof Y&&(e.sub=n,n=e.sub.base()),e.base=n,e.dimension={from:0,to:n},void Y.call(t,"Subset",n,e)):new kn(n,e)},__static__:{C:function(n,e){return b(e,n)},P:Y.P,T:Y.T,count:function(n,e){return nn.Math.pow2(n)},initial:function(n,e,t){var u=0>n?r(e,0,1):[];return u},cascade:Y.cascade,dual:function(n,e,t,r){if(null==n)return null;var u=this,i=r&&r.order?r.order:0,l=u.C,o=u.P;u.T;return n=yn&i?pn&i?n.slice():o(n,t):xn&i?pn&i?n.slice():o(n,t):gn&i?pn&i?o(l(n,t),t):l(n,t):pn&i?n.slice():o(n,t),r&&"binary"===r.type&&(n=y(n,t)),n},succ:Y.succ,rand:function(n,e){for(var t,u=nn.Math.rndInt,i=null,l=n-1;l>=0;l--)u(0,1)&&(i={len:i?i.len+1:1,k:l,next:i});return t=i?r(i.len,function(n){var e=i.k;return i=i.next,e}):[]},randu:Y.rand,rank:function(n,e,t){for(var r=nn.Arithmetic,u=r.O,i=r.I,l=r.add,o=r.shl,a=u,s=0,f=subset.length;f>s;)a=l(a,o(i,subset[s++]));return a},unrank:function(n,e,t){var r=this,u=nn.Arithmetic,i=u.O,l=u.J,o=u.band,a=u.shr,s=u.gt,f=[],c=0;if(!u.inside(n,l,t&&t.count?t.count:r.count(e,t)))return null;for(;s(n,i);)s(o(n,1),i)&&f.push(c),s(o(n,2),i)&&f.push(c+1),s(o(n,4),i)&&f.push(c+2),s(o(n,8),i)&&f.push(c+3),s(o(n,16),i)&&f.push(c+4),s(o(n,32),i)&&f.push(c+5),s(o(n,64),i)&&f.push(c+6),s(o(n,128),i)&&f.push(c+7),c+=8,n=a(n,8);return f},binary:function(n,e,t){return-1===t?A(n,e):y(n,e)}}}),Z=nn.Partition=hn(Y,{constructor:function Sn(n,e){var t=this;if(!(t instanceof Sn))return new Sn(n,e);e=e||{},e.type=e.type||"partition",n=n||1,n instanceof Y&&(e.sub=n,n=e.sub.base());var r=e["max="]?0|e["max="]:null,u=e["parts="]?0|e["parts="]:null,i=u?u:r?n-r+1:n,l=u?u:r?fn.ceil(n/r):1;e.base=n,e.dimension="constant"===e.length?u||n:i===l?l:{from:fn.min(l,i),to:fn.max(l,i)},Y.call(t,"Partition",n,e)},__static__:{C:function(n,e,t){return w(n,!0===t)},P:Y.P,T:Y.T,count:function(n,e){var t,r,u=nn.Arithmetic.add,i=nn.Math.partitions,l=e&&e["max="]?0|e["max="]:null,o=e&&e["parts="]?0|e["parts="]:null,a=nn.Arithmetic.O,s=l?l:0,f=l?l:1,c=o?o:1,d=o?o:n;if(0>n||o&&l&&(o+l>n+1||n>o*l)||l&&l>n||o&&o>n)return a;for(l&&!o&&(s=0,f=1,c=l,d=l),t=c;d>=t;t++)for(r=s?s:n-t+1;r>=f;r--)a=u(a,i(n,t,r));return a},initial:function(n,e,t){var u,i,l,o=t&&t["max="]?0|t["max="]:null,a=t&&t["parts="]?0|t["parts="]:null;if(0>e)return null;if(a&&o)return null;if(a&&(o=a,a=null),o){if(o>e)return null;i=fn.floor(e/o),l=e%o,u=0>n?r(i,o,0).concat(l?[l]:[]):[o].concat(r(e-o,1,0))}else u=0>n?[e]:r(e,1,0);return u},cascade:Y.cascade,dual:function(n,e,t,u){if(null==n)return null;var i=this,l=u&&u.order?u.order:0,o=u&&u["max="]?0|u["max="]:null,a=u&&u["parts="]?0|u["parts="]:null,s=i.C,f=i.P;i.T;return a&&!o&&(n=w(n)),n=yn&l?pn&l?f(n,t):n.slice():xn&l?pn&l?f(n,t):n.slice():gn&l?pn&l?f(s(n,t),t):s(n,t):pn&l?f(n,t):n.slice(),u&&"unpacked"===u.type&&(n=I(n)),u&&"set"===u.type?O(n):(u&&"constant"===u.length&&n.lengthr||l&&i&&(l+i>r+1||r>l*i)||l&&l>r||i&&i>r?null:B(e,r,n,l,i)},rand:Y.rand,randu:Y.rand,rank:e,unrank:e,conjugate:w,sets:function(n,e){return-1===e?C(n):O(n)},pack:function(n,e){return-1===e?I(n):M(n)}}}),Z.transpose=Z.conjugate,nn}); \ No newline at end of file